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 static int __init split_fs_names(char *page, char *names) 342 { 343 int count = 0; 344 char *p = page; 345 346 strcpy(p, root_fs_names); 347 while (*p++) { 348 if (p[-1] == ',') 349 p[-1] = '\0'; 350 } 351 *p = '\0'; 352 353 for (p = page; *p; p += strlen(p)+1) 354 count++; 355 356 return count; 357 } 358 359 static int __init do_mount_root(const char *name, const char *fs, 360 const int flags, const void *data) 361 { 362 struct super_block *s; 363 struct page *p = NULL; 364 char *data_page = NULL; 365 int ret; 366 367 if (data) { 368 /* init_mount() requires a full page as fifth argument */ 369 p = alloc_page(GFP_KERNEL); 370 if (!p) 371 return -ENOMEM; 372 data_page = page_address(p); 373 /* zero-pad. init_mount() will make sure it's terminated */ 374 strncpy(data_page, data, PAGE_SIZE); 375 } 376 377 ret = init_mount(name, "/root", fs, flags, data_page); 378 if (ret) 379 goto out; 380 381 init_chdir("/root"); 382 s = current->fs->pwd.dentry->d_sb; 383 ROOT_DEV = s->s_dev; 384 printk(KERN_INFO 385 "VFS: Mounted root (%s filesystem)%s on device %u:%u.\n", 386 s->s_type->name, 387 sb_rdonly(s) ? " readonly" : "", 388 MAJOR(ROOT_DEV), MINOR(ROOT_DEV)); 389 390 out: 391 if (p) 392 put_page(p); 393 return ret; 394 } 395 396 void __init mount_block_root(char *name, int flags) 397 { 398 struct page *page = alloc_page(GFP_KERNEL); 399 char *fs_names = page_address(page); 400 char *p; 401 char b[BDEVNAME_SIZE]; 402 int num_fs, i; 403 404 scnprintf(b, BDEVNAME_SIZE, "unknown-block(%u,%u)", 405 MAJOR(ROOT_DEV), MINOR(ROOT_DEV)); 406 if (root_fs_names) 407 num_fs = split_fs_names(fs_names, root_fs_names); 408 else 409 num_fs = list_bdev_fs_names(fs_names, PAGE_SIZE); 410 retry: 411 for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1) { 412 int err = do_mount_root(name, p, flags, root_mount_data); 413 switch (err) { 414 case 0: 415 goto out; 416 case -EACCES: 417 case -EINVAL: 418 continue; 419 } 420 /* 421 * Allow the user to distinguish between failed sys_open 422 * and bad superblock on root device. 423 * and give them a list of the available devices 424 */ 425 printk("VFS: Cannot open root device \"%s\" or %s: error %d\n", 426 root_device_name, b, err); 427 printk("Please append a correct \"root=\" boot option; here are the available partitions:\n"); 428 429 printk_all_partitions(); 430 panic("VFS: Unable to mount root fs on %s", b); 431 } 432 if (!(flags & SB_RDONLY)) { 433 flags |= SB_RDONLY; 434 goto retry; 435 } 436 437 printk("List of all partitions:\n"); 438 printk_all_partitions(); 439 printk("No filesystem could mount root, tried: "); 440 for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p)+1) 441 printk(" %s", p); 442 printk("\n"); 443 panic("VFS: Unable to mount root fs on %s", b); 444 out: 445 put_page(page); 446 } 447 448 #ifdef CONFIG_ROOT_NFS 449 450 #define NFSROOT_TIMEOUT_MIN 5 451 #define NFSROOT_TIMEOUT_MAX 30 452 #define NFSROOT_RETRY_MAX 5 453 454 static int __init mount_nfs_root(void) 455 { 456 char *root_dev, *root_data; 457 unsigned int timeout; 458 int try, err; 459 460 err = nfs_root_data(&root_dev, &root_data); 461 if (err != 0) 462 return 0; 463 464 /* 465 * The server or network may not be ready, so try several 466 * times. Stop after a few tries in case the client wants 467 * to fall back to other boot methods. 468 */ 469 timeout = NFSROOT_TIMEOUT_MIN; 470 for (try = 1; ; try++) { 471 err = do_mount_root(root_dev, "nfs", 472 root_mountflags, root_data); 473 if (err == 0) 474 return 1; 475 if (try > NFSROOT_RETRY_MAX) 476 break; 477 478 /* Wait, in case the server refused us immediately */ 479 ssleep(timeout); 480 timeout <<= 1; 481 if (timeout > NFSROOT_TIMEOUT_MAX) 482 timeout = NFSROOT_TIMEOUT_MAX; 483 } 484 return 0; 485 } 486 #endif 487 488 #ifdef CONFIG_CIFS_ROOT 489 490 extern int cifs_root_data(char **dev, char **opts); 491 492 #define CIFSROOT_TIMEOUT_MIN 5 493 #define CIFSROOT_TIMEOUT_MAX 30 494 #define CIFSROOT_RETRY_MAX 5 495 496 static int __init mount_cifs_root(void) 497 { 498 char *root_dev, *root_data; 499 unsigned int timeout; 500 int try, err; 501 502 err = cifs_root_data(&root_dev, &root_data); 503 if (err != 0) 504 return 0; 505 506 timeout = CIFSROOT_TIMEOUT_MIN; 507 for (try = 1; ; try++) { 508 err = do_mount_root(root_dev, "cifs", root_mountflags, 509 root_data); 510 if (err == 0) 511 return 1; 512 if (try > CIFSROOT_RETRY_MAX) 513 break; 514 515 ssleep(timeout); 516 timeout <<= 1; 517 if (timeout > CIFSROOT_TIMEOUT_MAX) 518 timeout = CIFSROOT_TIMEOUT_MAX; 519 } 520 return 0; 521 } 522 #endif 523 524 static bool __init fs_is_nodev(char *fstype) 525 { 526 struct file_system_type *fs = get_fs_type(fstype); 527 bool ret = false; 528 529 if (fs) { 530 ret = !(fs->fs_flags & FS_REQUIRES_DEV); 531 put_filesystem(fs); 532 } 533 534 return ret; 535 } 536 537 static int __init mount_nodev_root(void) 538 { 539 char *fs_names, *fstype; 540 int err = -EINVAL; 541 int num_fs, i; 542 543 fs_names = (void *)__get_free_page(GFP_KERNEL); 544 if (!fs_names) 545 return -EINVAL; 546 num_fs = split_fs_names(fs_names, root_fs_names); 547 548 for (i = 0, fstype = fs_names; i < num_fs; 549 i++, fstype += strlen(fstype) + 1) { 550 if (!fs_is_nodev(fstype)) 551 continue; 552 err = do_mount_root(root_device_name, fstype, root_mountflags, 553 root_mount_data); 554 if (!err) 555 break; 556 if (err != -EACCES && err != -EINVAL) 557 panic("VFS: Unable to mount root \"%s\" (%s), err=%d\n", 558 root_device_name, fstype, err); 559 } 560 561 free_page((unsigned long)fs_names); 562 return err; 563 } 564 565 void __init mount_root(void) 566 { 567 #ifdef CONFIG_ROOT_NFS 568 if (ROOT_DEV == Root_NFS) { 569 if (!mount_nfs_root()) 570 printk(KERN_ERR "VFS: Unable to mount root fs via NFS.\n"); 571 return; 572 } 573 #endif 574 #ifdef CONFIG_CIFS_ROOT 575 if (ROOT_DEV == Root_CIFS) { 576 if (!mount_cifs_root()) 577 printk(KERN_ERR "VFS: Unable to mount root fs via SMB.\n"); 578 return; 579 } 580 #endif 581 if (ROOT_DEV == 0 && root_device_name && root_fs_names) { 582 if (mount_nodev_root() == 0) 583 return; 584 } 585 #ifdef CONFIG_BLOCK 586 { 587 int err = create_dev("/dev/root", ROOT_DEV); 588 589 if (err < 0) 590 pr_emerg("Failed to create /dev/root: %d\n", err); 591 mount_block_root("/dev/root", root_mountflags); 592 } 593 #endif 594 } 595 596 /* 597 * Prepare the namespace - decide what/where to mount, load ramdisks, etc. 598 */ 599 void __init prepare_namespace(void) 600 { 601 if (root_delay) { 602 printk(KERN_INFO "Waiting %d sec before mounting root device...\n", 603 root_delay); 604 ssleep(root_delay); 605 } 606 607 /* 608 * wait for the known devices to complete their probing 609 * 610 * Note: this is a potential source of long boot delays. 611 * For example, it is not atypical to wait 5 seconds here 612 * for the touchpad of a laptop to initialize. 613 */ 614 wait_for_device_probe(); 615 616 md_run_setup(); 617 618 if (saved_root_name[0]) { 619 root_device_name = saved_root_name; 620 if (!strncmp(root_device_name, "mtd", 3) || 621 !strncmp(root_device_name, "ubi", 3)) { 622 mount_block_root(root_device_name, root_mountflags); 623 goto out; 624 } 625 ROOT_DEV = name_to_dev_t(root_device_name); 626 if (strncmp(root_device_name, "/dev/", 5) == 0) 627 root_device_name += 5; 628 } 629 630 if (initrd_load()) 631 goto out; 632 633 /* wait for any asynchronous scanning to complete */ 634 if ((ROOT_DEV == 0) && root_wait) { 635 printk(KERN_INFO "Waiting for root device %s...\n", 636 saved_root_name); 637 while (driver_probe_done() != 0 || 638 (ROOT_DEV = name_to_dev_t(saved_root_name)) == 0) 639 msleep(5); 640 async_synchronize_full(); 641 } 642 643 mount_root(); 644 out: 645 devtmpfs_mount(); 646 init_mount(".", "/", NULL, MS_MOVE, NULL); 647 init_chroot("."); 648 } 649 650 static bool is_tmpfs; 651 static int rootfs_init_fs_context(struct fs_context *fc) 652 { 653 if (IS_ENABLED(CONFIG_TMPFS) && is_tmpfs) 654 return shmem_init_fs_context(fc); 655 656 return ramfs_init_fs_context(fc); 657 } 658 659 struct file_system_type rootfs_fs_type = { 660 .name = "rootfs", 661 .init_fs_context = rootfs_init_fs_context, 662 .kill_sb = kill_litter_super, 663 }; 664 665 void __init init_rootfs(void) 666 { 667 if (IS_ENABLED(CONFIG_TMPFS) && !saved_root_name[0] && 668 (!root_fs_names || strstr(root_fs_names, "tmpfs"))) 669 is_tmpfs = true; 670 } 671