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