Commit cb39f529 authored by Stefan Berger's avatar Stefan Berger Committed by GUO Zihua
Browse files

rootfs: Fix support for rootfstype= when root= is given

stable inclusion
from stable-v6.6.14
commit 2e54968baba3ea5856c5ff1e7fce438c6351cfe9
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I9FP1N
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=3b8d7a1b851918cc3529a38a271c7a0ea8ad1217



--------------------------------

commit 21528c69a0d8483f7c6345b1a0bc8d8975e9a172 upstream.

Documentation/filesystems/ramfs-rootfs-initramfs.rst states:

  If CONFIG_TMPFS is enabled, rootfs will use tmpfs instead of ramfs by
  default.  To force ramfs, add "rootfstype=ramfs" to the kernel command
  line.

This currently does not work when root= is provided since then
saved_root_name contains a string and rootfstype= is ignored. Therefore,
ramfs is currently always chosen when root= is provided.

The current behavior for rootfs's filesystem is:

   root=       | rootfstype= | chosen rootfs filesystem
   ------------+-------------+--------------------------
   unspecified | unspecified | tmpfs
   unspecified | tmpfs       | tmpfs
   unspecified | ramfs       | ramfs
    provided   | ignored     | ramfs

rootfstype= should be respected regardless whether root= is given,
as shown below:

   root=       | rootfstype= | chosen rootfs filesystem
   ------------+-------------+--------------------------
   unspecified | unspecified | tmpfs  (as before)
   unspecified | tmpfs       | tmpfs  (as before)
   unspecified | ramfs       | ramfs  (as before)
    provided   | unspecified | ramfs  (compatibility with before)
    provided   | tmpfs       | tmpfs  (new)
    provided   | ramfs       | ramfs  (new)

This table represents the new behavior.

Fixes: 6e19eded ("initmpfs: use initramfs if rootfstype= or root= specified")
Cc: <stable@vger.kernel.org>
Signed-off-by: default avatarRob Landley <rob@landley.net>
Link: https://lore.kernel.org/lkml/8244c75f-445e-b15b-9dbf-266e7ca666e2@landley.net/


Reviewed-and-Tested-by: default avatarMimi Zohar <zohar@linux.ibm.com>
Signed-off-by: default avatarStefan Berger <stefanb@linux.ibm.com>
Link: https://lore.kernel.org/r/20231120011248.396012-1-stefanb@linux.ibm.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Conflicts:
	init/do_mounts.c
Signed-off-by: default avatarGUO Zihua <guozihua@huawei.com>
parent 96c1e1c4
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -527,9 +527,14 @@ void __init init_rootfs(void)
#ifdef CONFIG_IMA_DIGEST_LIST
	if (IS_ENABLED(CONFIG_TMPFS) &&
		(!saved_root_name[0] || initramtmpfs) &&
#else
	if (IS_ENABLED(CONFIG_TMPFS) && !saved_root_name[0] &&
#endif
		(!root_fs_names || strstr(root_fs_names, "tmpfs")))
		is_tmpfs = true;
#else
	if (IS_ENABLED(CONFIG_TMPFS)) {
		if (!saved_root_name[0] && !root_fs_names)
			is_tmpfs = true;
		else if (root_fs_names && !!strstr(root_fs_names, "tmpfs"))
			is_tmpfs = true;
	}
#endif
}