1 // SPDX-License-Identifier: GPL-2.0-only 2 #include <linux/module.h> 3 #include <linux/sched.h> 4 #include <linux/ctype.h> 5 #include <linux/fd.h> 6 #include <linux/tty.h> 7 #include <linux/suspend.h> 8 #include <linux/root_dev.h> 9 #include <linux/security.h> 10 #include <linux/delay.h> 11 #include <linux/genhd.h> 12 #include <linux/mount.h> 13 #include <linux/device.h> 14 #include <linux/init.h> 15 #include <linux/fs.h> 16 #include <linux/initrd.h> 17 #include <linux/async.h> 18 #include <linux/fs_struct.h> 19 #include <linux/slab.h> 20 #include <linux/ramfs.h> 21 #include <linux/shmem_fs.h> 22 23 #include <linux/nfs_fs.h> 24 #include <linux/nfs_fs_sb.h> 25 #include <linux/nfs_mount.h> 26 #include <linux/raid/detect.h> 27 #include <uapi/linux/mount.h> 28 29 #include "do_mounts.h" 30 31 int root_mountflags = MS_RDONLY | MS_SILENT; 32 static char * __initdata root_device_name; 33 static char __initdata saved_root_name[64]; 34 static int root_wait; 35 36 dev_t ROOT_DEV; 37 38 static int __init load_ramdisk(char *str) 39 { 40 pr_warn("ignoring the deprecated load_ramdisk= option\n"); 41 return 1; 42 } 43 __setup("load_ramdisk=", load_ramdisk); 44 45 static int __init readonly(char *str) 46 { 47 if (*str) 48 return 0; 49 root_mountflags |= MS_RDONLY; 50 return 1; 51 } 52 53 static int __init readwrite(char *str) 54 { 55 if (*str) 56 return 0; 57 root_mountflags &= ~MS_RDONLY; 58 return 1; 59 } 60 61 __setup("ro", readonly); 62 __setup("rw", readwrite); 63 64 #ifdef CONFIG_BLOCK 65 struct uuidcmp { 66 const char *uuid; 67 int len; 68 }; 69 70 /** 71 * match_dev_by_uuid - callback for finding a partition using its uuid 72 * @dev: device passed in by the caller 73 * @data: opaque pointer to the desired struct uuidcmp to match 74 * 75 * Returns 1 if the device matches, and 0 otherwise. 76 */ 77 static int match_dev_by_uuid(struct device *dev, const void *data) 78 { 79 struct block_device *bdev = dev_to_bdev(dev); 80 const struct uuidcmp *cmp = data; 81 82 if (!bdev->bd_meta_info || 83 strncasecmp(cmp->uuid, bdev->bd_meta_info->uuid, cmp->len)) 84 return 0; 85 return 1; 86 } 87 88 /** 89 * devt_from_partuuid - looks up the dev_t of a partition by its UUID 90 * @uuid_str: char array containing ascii UUID 91 * 92 * The function will return the first partition which contains a matching 93 * UUID value in its partition_meta_info struct. This does not search 94 * by filesystem UUIDs. 95 * 96 * If @uuid_str is followed by a "/PARTNROFF=%d", then the number will be 97 * extracted and used as an offset from the partition identified by the UUID. 98 * 99 * Returns the matching dev_t on success or 0 on failure. 100 */ 101 static dev_t devt_from_partuuid(const char *uuid_str) 102 { 103 struct uuidcmp cmp; 104 struct device *dev = NULL; 105 dev_t devt = 0; 106 int offset = 0; 107 char *slash; 108 109 cmp.uuid = uuid_str; 110 111 slash = strchr(uuid_str, '/'); 112 /* Check for optional partition number offset attributes. */ 113 if (slash) { 114 char c = 0; 115 116 /* Explicitly fail on poor PARTUUID syntax. */ 117 if (sscanf(slash + 1, "PARTNROFF=%d%c", &offset, &c) != 1) 118 goto clear_root_wait; 119 cmp.len = slash - uuid_str; 120 } else { 121 cmp.len = strlen(uuid_str); 122 } 123 124 if (!cmp.len) 125 goto clear_root_wait; 126 127 dev = class_find_device(&block_class, NULL, &cmp, &match_dev_by_uuid); 128 if (!dev) 129 return 0; 130 131 if (offset) { 132 /* 133 * Attempt to find the requested partition by adding an offset 134 * to the partition number found by UUID. 135 */ 136 devt = part_devt(dev_to_disk(dev), 137 dev_to_bdev(dev)->bd_partno + offset); 138 } else { 139 devt = dev->devt; 140 } 141 142 put_device(dev); 143 return devt; 144 145 clear_root_wait: 146 pr_err("VFS: PARTUUID= is invalid.\n" 147 "Expected PARTUUID=<valid-uuid-id>[/PARTNROFF=%%d]\n"); 148 if (root_wait) 149 pr_err("Disabling rootwait; root= is invalid.\n"); 150 root_wait = 0; 151 return 0; 152 } 153 154 /** 155 * match_dev_by_label - callback for finding a partition using its label 156 * @dev: device passed in by the caller 157 * @data: opaque pointer to the label to match 158 * 159 * Returns 1 if the device matches, and 0 otherwise. 160 */ 161 static int match_dev_by_label(struct device *dev, const void *data) 162 { 163 struct block_device *bdev = dev_to_bdev(dev); 164 const char *label = data; 165 166 if (!bdev->bd_meta_info || strcmp(label, bdev->bd_meta_info->volname)) 167 return 0; 168 return 1; 169 } 170 171 static dev_t devt_from_partlabel(const char *label) 172 { 173 struct device *dev; 174 dev_t devt = 0; 175 176 dev = class_find_device(&block_class, NULL, label, &match_dev_by_label); 177 if (dev) { 178 devt = dev->devt; 179 put_device(dev); 180 } 181 182 return devt; 183 } 184 185 static dev_t devt_from_devname(const char *name) 186 { 187 dev_t devt = 0; 188 int part; 189 char s[32]; 190 char *p; 191 192 if (strlen(name) > 31) 193 return 0; 194 strcpy(s, name); 195 for (p = s; *p; p++) { 196 if (*p == '/') 197 *p = '!'; 198 } 199 200 devt = blk_lookup_devt(s, 0); 201 if (devt) 202 return devt; 203 204 /* 205 * Try non-existent, but valid partition, which may only exist after 206 * opening the device, like partitioned md devices. 207 */ 208 while (p > s && isdigit(p[-1])) 209 p--; 210 if (p == s || !*p || *p == '0') 211 return 0; 212 213 /* try disk name without <part number> */ 214 part = simple_strtoul(p, NULL, 10); 215 *p = '\0'; 216 devt = blk_lookup_devt(s, part); 217 if (devt) 218 return devt; 219 220 /* try disk name without p<part number> */ 221 if (p < s + 2 || !isdigit(p[-2]) || p[-1] != 'p') 222 return 0; 223 p[-1] = '\0'; 224 return blk_lookup_devt(s, part); 225 } 226 #endif /* CONFIG_BLOCK */ 227 228 static dev_t devt_from_devnum(const char *name) 229 { 230 unsigned maj, min, offset; 231 dev_t devt = 0; 232 char *p, dummy; 233 234 if (sscanf(name, "%u:%u%c", &maj, &min, &dummy) == 2 || 235 sscanf(name, "%u:%u:%u:%c", &maj, &min, &offset, &dummy) == 3) { 236 devt = MKDEV(maj, min); 237 if (maj != MAJOR(devt) || min != MINOR(devt)) 238 return 0; 239 } else { 240 devt = new_decode_dev(simple_strtoul(name, &p, 16)); 241 if (*p) 242 return 0; 243 } 244 245 return devt; 246 } 247 248 /* 249 * Convert a name into device number. We accept the following variants: 250 * 251 * 1) <hex_major><hex_minor> device number in hexadecimal represents itself 252 * no leading 0x, for example b302. 253 * 2) /dev/nfs represents Root_NFS (0xff) 254 * 3) /dev/<disk_name> represents the device number of disk 255 * 4) /dev/<disk_name><decimal> represents the device number 256 * of partition - device number of disk plus the partition number 257 * 5) /dev/<disk_name>p<decimal> - same as the above, that form is 258 * used when disk name of partitioned disk ends on a digit. 259 * 6) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the 260 * unique id of a partition if the partition table provides it. 261 * The UUID may be either an EFI/GPT UUID, or refer to an MSDOS 262 * partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero- 263 * filled hex representation of the 32-bit "NT disk signature", and PP 264 * is a zero-filled hex representation of the 1-based partition number. 265 * 7) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to 266 * a partition with a known unique id. 267 * 8) <major>:<minor> major and minor number of the device separated by 268 * a colon. 269 * 9) PARTLABEL=<name> with name being the GPT partition label. 270 * MSDOS partitions do not support labels! 271 * 10) /dev/cifs represents Root_CIFS (0xfe) 272 * 273 * If name doesn't have fall into the categories above, we return (0,0). 274 * block_class is used to check if something is a disk name. If the disk 275 * name contains slashes, the device name has them replaced with 276 * bangs. 277 */ 278 dev_t name_to_dev_t(const char *name) 279 { 280 if (strcmp(name, "/dev/nfs") == 0) 281 return Root_NFS; 282 if (strcmp(name, "/dev/cifs") == 0) 283 return Root_CIFS; 284 if (strcmp(name, "/dev/ram") == 0) 285 return Root_RAM0; 286 #ifdef CONFIG_BLOCK 287 if (strncmp(name, "PARTUUID=", 9) == 0) 288 return devt_from_partuuid(name + 9); 289 if (strncmp(name, "PARTLABEL=", 10) == 0) 290 return devt_from_partlabel(name + 10); 291 if (strncmp(name, "/dev/", 5) == 0) 292 return devt_from_devname(name + 5); 293 #endif 294 return devt_from_devnum(name); 295 } 296 EXPORT_SYMBOL_GPL(name_to_dev_t); 297 298 static int __init root_dev_setup(char *line) 299 { 300 strlcpy(saved_root_name, line, sizeof(saved_root_name)); 301 return 1; 302 } 303 304 __setup("root=", root_dev_setup); 305 306 static int __init rootwait_setup(char *str) 307 { 308 if (*str) 309 return 0; 310 root_wait = 1; 311 return 1; 312 } 313 314 __setup("rootwait", rootwait_setup); 315 316 static char * __initdata root_mount_data; 317 static int __init root_data_setup(char *str) 318 { 319 root_mount_data = str; 320 return 1; 321 } 322 323 static char * __initdata root_fs_names; 324 static int __init fs_names_setup(char *str) 325 { 326 root_fs_names = str; 327 return 1; 328 } 329 330 static unsigned int __initdata root_delay; 331 static int __init root_delay_setup(char *str) 332 { 333 root_delay = simple_strtoul(str, NULL, 0); 334 return 1; 335 } 336 337 __setup("rootflags=", root_data_setup); 338 __setup("rootfstype=", fs_names_setup); 339 __setup("rootdelay=", root_delay_setup); 340 341 /* This can return zero length strings. Caller should check */ 342 static int __init split_fs_names(char *page, size_t size, char *names) 343 { 344 int count = 1; 345 char *p = page; 346 347 strlcpy(p, root_fs_names, size); 348 while (*p++) { 349 if (p[-1] == ',') { 350 p[-1] = '\0'; 351 count++; 352 } 353 } 354 355 return count; 356 } 357 358 static int __init do_mount_root(const char *name, const char *fs, 359 const int flags, const void *data) 360 { 361 struct super_block *s; 362 struct page *p = NULL; 363 char *data_page = NULL; 364 int ret; 365 366 if (data) { 367 /* init_mount() requires a full page as fifth argument */ 368 p = alloc_page(GFP_KERNEL); 369 if (!p) 370 return -ENOMEM; 371 data_page = page_address(p); 372 /* zero-pad. init_mount() will make sure it's terminated */ 373 strncpy(data_page, data, PAGE_SIZE); 374 } 375 376 ret = init_mount(name, "/root", fs, flags, data_page); 377 if (ret) 378 goto out; 379 380 init_chdir("/root"); 381 s = current->fs->pwd.dentry->d_sb; 382 ROOT_DEV = s->s_dev; 383 printk(KERN_INFO 384 "VFS: Mounted root (%s filesystem)%s on device %u:%u.\n", 385 s->s_type->name, 386 sb_rdonly(s) ? " readonly" : "", 387 MAJOR(ROOT_DEV), MINOR(ROOT_DEV)); 388 389 out: 390 if (p) 391 put_page(p); 392 return ret; 393 } 394 395 void __init mount_block_root(char *name, int flags) 396 { 397 struct page *page = alloc_page(GFP_KERNEL); 398 char *fs_names = page_address(page); 399 char *p; 400 char b[BDEVNAME_SIZE]; 401 int num_fs, i; 402 403 scnprintf(b, BDEVNAME_SIZE, "unknown-block(%u,%u)", 404 MAJOR(ROOT_DEV), MINOR(ROOT_DEV)); 405 if (root_fs_names) 406 num_fs = split_fs_names(fs_names, PAGE_SIZE, root_fs_names); 407 else 408 num_fs = list_bdev_fs_names(fs_names, PAGE_SIZE); 409 retry: 410 for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1) { 411 int err; 412 413 if (!*p) 414 continue; 415 err = do_mount_root(name, p, flags, root_mount_data); 416 switch (err) { 417 case 0: 418 goto out; 419 case -EACCES: 420 case -EINVAL: 421 continue; 422 } 423 /* 424 * Allow the user to distinguish between failed sys_open 425 * and bad superblock on root device. 426 * and give them a list of the available devices 427 */ 428 printk("VFS: Cannot open root device \"%s\" or %s: error %d\n", 429 root_device_name, b, err); 430 printk("Please append a correct \"root=\" boot option; here are the available partitions:\n"); 431 432 printk_all_partitions(); 433 panic("VFS: Unable to mount root fs on %s", b); 434 } 435 if (!(flags & SB_RDONLY)) { 436 flags |= SB_RDONLY; 437 goto retry; 438 } 439 440 printk("List of all partitions:\n"); 441 printk_all_partitions(); 442 printk("No filesystem could mount root, tried: "); 443 for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1) 444 printk(" %s", p); 445 printk("\n"); 446 panic("VFS: Unable to mount root fs on %s", b); 447 out: 448 put_page(page); 449 } 450 451 #ifdef CONFIG_ROOT_NFS 452 453 #define NFSROOT_TIMEOUT_MIN 5 454 #define NFSROOT_TIMEOUT_MAX 30 455 #define NFSROOT_RETRY_MAX 5 456 457 static int __init mount_nfs_root(void) 458 { 459 char *root_dev, *root_data; 460 unsigned int timeout; 461 int try, err; 462 463 err = nfs_root_data(&root_dev, &root_data); 464 if (err != 0) 465 return 0; 466 467 /* 468 * The server or network may not be ready, so try several 469 * times. Stop after a few tries in case the client wants 470 * to fall back to other boot methods. 471 */ 472 timeout = NFSROOT_TIMEOUT_MIN; 473 for (try = 1; ; try++) { 474 err = do_mount_root(root_dev, "nfs", 475 root_mountflags, root_data); 476 if (err == 0) 477 return 1; 478 if (try > NFSROOT_RETRY_MAX) 479 break; 480 481 /* Wait, in case the server refused us immediately */ 482 ssleep(timeout); 483 timeout <<= 1; 484 if (timeout > NFSROOT_TIMEOUT_MAX) 485 timeout = NFSROOT_TIMEOUT_MAX; 486 } 487 return 0; 488 } 489 #endif 490 491 #ifdef CONFIG_CIFS_ROOT 492 493 extern int cifs_root_data(char **dev, char **opts); 494 495 #define CIFSROOT_TIMEOUT_MIN 5 496 #define CIFSROOT_TIMEOUT_MAX 30 497 #define CIFSROOT_RETRY_MAX 5 498 499 static int __init mount_cifs_root(void) 500 { 501 char *root_dev, *root_data; 502 unsigned int timeout; 503 int try, err; 504 505 err = cifs_root_data(&root_dev, &root_data); 506 if (err != 0) 507 return 0; 508 509 timeout = CIFSROOT_TIMEOUT_MIN; 510 for (try = 1; ; try++) { 511 err = do_mount_root(root_dev, "cifs", root_mountflags, 512 root_data); 513 if (err == 0) 514 return 1; 515 if (try > CIFSROOT_RETRY_MAX) 516 break; 517 518 ssleep(timeout); 519 timeout <<= 1; 520 if (timeout > CIFSROOT_TIMEOUT_MAX) 521 timeout = CIFSROOT_TIMEOUT_MAX; 522 } 523 return 0; 524 } 525 #endif 526 527 static bool __init fs_is_nodev(char *fstype) 528 { 529 struct file_system_type *fs = get_fs_type(fstype); 530 bool ret = false; 531 532 if (fs) { 533 ret = !(fs->fs_flags & FS_REQUIRES_DEV); 534 put_filesystem(fs); 535 } 536 537 return ret; 538 } 539 540 static int __init mount_nodev_root(void) 541 { 542 char *fs_names, *fstype; 543 int err = -EINVAL; 544 int num_fs, i; 545 546 fs_names = (void *)__get_free_page(GFP_KERNEL); 547 if (!fs_names) 548 return -EINVAL; 549 num_fs = split_fs_names(fs_names, PAGE_SIZE, root_fs_names); 550 551 for (i = 0, fstype = fs_names; i < num_fs; 552 i++, fstype += strlen(fstype) + 1) { 553 if (!*fstype) 554 continue; 555 if (!fs_is_nodev(fstype)) 556 continue; 557 err = do_mount_root(root_device_name, fstype, root_mountflags, 558 root_mount_data); 559 if (!err) 560 break; 561 } 562 563 free_page((unsigned long)fs_names); 564 return err; 565 } 566 567 void __init mount_root(void) 568 { 569 #ifdef CONFIG_ROOT_NFS 570 if (ROOT_DEV == Root_NFS) { 571 if (!mount_nfs_root()) 572 printk(KERN_ERR "VFS: Unable to mount root fs via NFS.\n"); 573 return; 574 } 575 #endif 576 #ifdef CONFIG_CIFS_ROOT 577 if (ROOT_DEV == Root_CIFS) { 578 if (!mount_cifs_root()) 579 printk(KERN_ERR "VFS: Unable to mount root fs via SMB.\n"); 580 return; 581 } 582 #endif 583 if (ROOT_DEV == 0 && root_device_name && root_fs_names) { 584 if (mount_nodev_root() == 0) 585 return; 586 } 587 #ifdef CONFIG_BLOCK 588 { 589 int err = create_dev("/dev/root", ROOT_DEV); 590 591 if (err < 0) 592 pr_emerg("Failed to create /dev/root: %d\n", err); 593 mount_block_root("/dev/root", root_mountflags); 594 } 595 #endif 596 } 597 598 /* 599 * Prepare the namespace - decide what/where to mount, load ramdisks, etc. 600 */ 601 void __init prepare_namespace(void) 602 { 603 if (root_delay) { 604 printk(KERN_INFO "Waiting %d sec before mounting root device...\n", 605 root_delay); 606 ssleep(root_delay); 607 } 608 609 /* 610 * wait for the known devices to complete their probing 611 * 612 * Note: this is a potential source of long boot delays. 613 * For example, it is not atypical to wait 5 seconds here 614 * for the touchpad of a laptop to initialize. 615 */ 616 wait_for_device_probe(); 617 618 md_run_setup(); 619 620 if (saved_root_name[0]) { 621 root_device_name = saved_root_name; 622 if (!strncmp(root_device_name, "mtd", 3) || 623 !strncmp(root_device_name, "ubi", 3)) { 624 mount_block_root(root_device_name, root_mountflags); 625 goto out; 626 } 627 ROOT_DEV = name_to_dev_t(root_device_name); 628 if (strncmp(root_device_name, "/dev/", 5) == 0) 629 root_device_name += 5; 630 } 631 632 if (initrd_load()) 633 goto out; 634 635 /* wait for any asynchronous scanning to complete */ 636 if ((ROOT_DEV == 0) && root_wait) { 637 printk(KERN_INFO "Waiting for root device %s...\n", 638 saved_root_name); 639 while (driver_probe_done() != 0 || 640 (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0) 641 msleep(5); 642 async_synchronize_full(); 643 } 644 645 mount_root(); 646 out: 647 devtmpfs_mount(); 648 init_mount(".", "/", NULL, MS_MOVE, NULL); 649 init_chroot("."); 650 } 651 652 static bool is_tmpfs; 653 static int rootfs_init_fs_context(struct fs_context *fc) 654 { 655 if (IS_ENABLED(CONFIG_TMPFS) && is_tmpfs) 656 return shmem_init_fs_context(fc); 657 658 return ramfs_init_fs_context(fc); 659 } 660 661 struct file_system_type rootfs_fs_type = { 662 .name = "rootfs", 663 .init_fs_context = rootfs_init_fs_context, 664 .kill_sb = kill_litter_super, 665 }; 666 667 void __init init_rootfs(void) 668 { 669 if (IS_ENABLED(CONFIG_TMPFS) && !saved_root_name[0] && 670 (!root_fs_names || strstr(root_fs_names, "tmpfs"))) 671 is_tmpfs = true; 672 } 673