* [RFC PATCH 0/2] init: boot image-based systems without an initramfs (rootimage=)
@ 2026-07-18 19:15 Eric Curtin
2026-07-18 19:15 ` [RFC PATCH 1/2] init: support mounting the root filesystem from an image file Eric Curtin
2026-07-18 19:15 ` [RFC PATCH 2/2] init: support pinning the root image's fsverity digest Eric Curtin
0 siblings, 2 replies; 3+ messages in thread
From: Eric Curtin @ 2026-07-18 19:15 UTC (permalink / raw)
To: Alexander Viro, Christian Brauner
Cc: Jan Kara, Jonathan Corbet, Shuah Khan, Eric Biggers,
Theodore Y . Ts'o, Gao Xiang, Chao Yu, fsverity, linux-erofs,
linux-fsdevel, linux-doc, linux-kernel, Eric Curtin
Image-based Linux systems (bootc-style OS updaters, ChromeOS/Android-like
A/B schemes, embedded appliances) keep one or more immutable root
filesystem images as sealed files on a writable filesystem and pick one
at boot. Booting such a system today always requires an initramfs, even
when that initramfs has nothing else to do; its only jobs are to parse
the kernel command line, mount the state filesystem, verify the image,
loop-mount it and switch_root into it.
This series teaches the kernel to do all of that directly:
root=PARTUUID=... rootimage=/deploy/a/root.erofs rootimagefstype=erofs \
rootimageverity=sha256:a9548f4c... rootimagesrcdir=/var/state
Patch 1 adds rootimage= (plus rootimagefstype=/rootimageflags=/
rootimagesrcdir=): root= then merely names the "carrier" filesystem.
The image file on it is mounted read-only through the filesystem's
file-backed mount support (available in erofs since v6.12), so no loop
device is involved, and it becomes the root that prepare_namespace()
pivots into. The carrier mount is detached by default, or moved to
rootimagesrcdir= inside the new root, which image-based systems
practically always want since the carrier holds their writable state.
Patch 2 adds rootimageverity=, which requires the image to carry a
specific fsverity file digest, reusing the fsverity_get_digest()
interface that IMA and overlayfs already use for digest pinning. With
a signed or measured command line (e.g. a unified kernel image), the
chain of trust extends to every byte of the root filesystem with no
userspace boot stage: the pinned digest authenticates the image's
Merkle tree root, and fsverity keeps verifying reads against it at
runtime, so later tampering with the carrier is caught as well.
This is the file-backed analogue of dm-mod.create= (CONFIG_DM_INIT),
which moved the equivalent block-device setup out of the initramfs for
verity-partition layouts back in v5.1. For file-based deployment
layouts nothing similar exists, so distributions ship a dracut stack
whose only purpose is the five steps above, and which remains the
largest and most failure-prone moving part of an otherwise fully
image-defined boot.
Tested on arm64 (qemu -M virt with KVM), with no initrd= at any point:
- control: plain ext4 root boots as before
- rootimage=: an erofs image file on ext4 is mounted as /, the carrier
ends up on /var/state, PID 1 runs from the image ~0.18s after kernel
entry
- rootimageverity= with the correct digest: boots, digest logged
- rootimageverity= with a wrong digest: panics with expected-vs-got
- build: defconfig and allnoconfig (!CONFIG_FS_VERITY, !CONFIG_BLOCK),
both with W=1, no warnings
Open questions for review:
- Should the carrier always be detached, dropping rootimagesrcdir=?
The image mount pins the carrier superblock either way, so userspace
can re-mount it, but a conflicting ro/rw state then needs a remount
dance.
- Should this be behind a Kconfig option like CONFIG_DM_INIT is? All
added code is __init and freed after boot.
- Naming: rootimage= vs. extending root= syntax (e.g. root=image:...).
This series was developed with AI assistance (see the Assisted-by tags
and Documentation/process/coding-assistants.rst).
Eric Curtin (2):
init: support mounting the root filesystem from an image file
init: support pinning the root image's fsverity digest
.../admin-guide/kernel-parameters.txt | 42 ++++
init/do_mounts.c | 221 ++++++++++++++++--
2 files changed, 250 insertions(+), 13 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 3+ messages in thread
* [RFC PATCH 1/2] init: support mounting the root filesystem from an image file
2026-07-18 19:15 [RFC PATCH 0/2] init: boot image-based systems without an initramfs (rootimage=) Eric Curtin
@ 2026-07-18 19:15 ` Eric Curtin
2026-07-18 19:15 ` [RFC PATCH 2/2] init: support pinning the root image's fsverity digest Eric Curtin
1 sibling, 0 replies; 3+ messages in thread
From: Eric Curtin @ 2026-07-18 19:15 UTC (permalink / raw)
To: Alexander Viro, Christian Brauner
Cc: Jan Kara, Jonathan Corbet, Shuah Khan, Eric Biggers,
Theodore Y . Ts'o, Gao Xiang, Chao Yu, fsverity, linux-erofs,
linux-fsdevel, linux-doc, linux-kernel, Eric Curtin
Image-based Linux systems (bootc-style OS updaters, ChromeOS/Android-like
A/B schemes, embedded appliances) commonly keep one or more immutable
root filesystem images as plain files on a writable "carrier" filesystem
and pick one at boot. Today that always requires an initramfs, even when
the initramfs has nothing else to do: the kernel can only mount a block
device (or NFS/CIFS/ubi/mtd) as root, so userspace must mount the
carrier, loop-mount the image and switch_root into it.
Add a rootimage= parameter naming an image file on the filesystem
specified by root=. When set, root= only designates the carrier: after
mounting it as usual, mount the image file read-only on /image and make
that the root that prepare_namespace() pivots into. The image is
mounted through the filesystem's file-backed mount support (available in
erofs since v6.12), so no loop device is involved. rootimagefstype= and
rootimageflags= mirror rootfstype=/rootflags= for the image mount, while
"ro"/"rw"/rootflags= keep applying to the carrier.
The carrier mount is detached again by default; the image mount keeps
its superblock pinned, so userspace can still mount it later. Since
systems following this model virtually always need the carrier mounted
(it holds their writable state), rootimagesrcdir= optionally names a
directory inside the image where the carrier mount is moved instead.
This is the file-backed analogue of what dm-mod.create= (CONFIG_DM_INIT)
already does for device-mapper targets: moving a fixed, declarative bit
of early-boot setup from initramfs userspace into the kernel so that
small and verified systems can boot with no initramfs at all.
Assisted-by: opencode:claude-fable-5
Signed-off-by: Eric Curtin <ericcurtin17@gmail.com>
---
.../admin-guide/kernel-parameters.txt | 29 ++++
init/do_mounts.c | 158 ++++++++++++++++--
2 files changed, 174 insertions(+), 13 deletions(-)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index b5493a7f8..5dbd56098 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -6699,6 +6699,35 @@ Kernel parameters
rootfstype= [KNL] Set root filesystem type
+ rootimage= [KNL] Mount the actual root filesystem from this
+ filesystem image file (absolute path) located on the
+ filesystem specified by root=, instead of using that
+ filesystem as the root directly. This allows
+ image-based systems that keep their (typically
+ read-only, e.g. erofs) root filesystem images as
+ plain files on a carrier filesystem to boot without
+ an initramfs. The image is mounted read-only via
+ the filesystem's file-backed mount support (no loop
+ device is set up); "ro", "rw" and rootflags= keep
+ applying to the carrier filesystem. Once the image
+ is mounted, the carrier mount is detached (but kept
+ busy by the image mount itself) unless
+ rootimagesrcdir= is also given.
+
+ rootimageflags= [KNL] Set root image filesystem mount option string,
+ used together with rootimage=.
+
+ rootimagefstype= [KNL] Set root image filesystem type, used together
+ with rootimage=. Default is to try all filesystems
+ known to the kernel that can mount a block device or
+ an image file.
+
+ rootimagesrcdir= [KNL] Directory (absolute path) inside the root
+ image where the mount of the carrier filesystem
+ holding the image (i.e. the filesystem specified by
+ root=) is moved to, instead of detaching it. Used
+ together with rootimage=.
+
rootwait [KNL] Wait (indefinitely) for root device to show up.
Useful for devices that are detected asynchronously
(e.g. USB and MMC devices).
diff --git a/init/do_mounts.c b/init/do_mounts.c
index 95e0b3a0f..1b96ef30b 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -122,13 +122,51 @@ __setup("rootflags=", root_data_setup);
__setup("rootfstype=", fs_names_setup);
__setup("rootdelay=", root_delay_setup);
+/*
+ * rootimage= mounts the actual root filesystem from an image file located
+ * on the filesystem specified by root= instead of using that filesystem
+ * as the root directly.
+ */
+static char * __initdata root_image;
+static int __init root_image_setup(char *str)
+{
+ root_image = str;
+ return 1;
+}
+
+static char * __initdata root_image_fs_names;
+static int __init root_image_fs_names_setup(char *str)
+{
+ root_image_fs_names = str;
+ return 1;
+}
+
+static char * __initdata root_image_mount_data;
+static int __init root_image_data_setup(char *str)
+{
+ root_image_mount_data = str;
+ return 1;
+}
+
+static char * __initdata root_image_srcdir;
+static int __init root_image_srcdir_setup(char *str)
+{
+ root_image_srcdir = str;
+ return 1;
+}
+
+__setup("rootimage=", root_image_setup);
+__setup("rootimagefstype=", root_image_fs_names_setup);
+__setup("rootimageflags=", root_image_data_setup);
+__setup("rootimagesrcdir=", root_image_srcdir_setup);
+
/* This can return zero length strings. Caller should check */
-static int __init split_fs_names(char *page, size_t size)
+static int __init split_fs_names(char *page, size_t size, char *names)
{
int count = 1;
char *p = page;
- strscpy(p, root_fs_names, size);
+ strscpy(p, names, size);
while (*p++) {
if (p[-1] == ',') {
p[-1] = '\0';
@@ -139,8 +177,9 @@ static int __init split_fs_names(char *page, size_t size)
return count;
}
-static int __init do_mount_root(const char *name, const char *fs,
- const int flags, const void *data)
+static int __init do_mount_root(const char *name, const char *dir,
+ const char *fs, const int flags,
+ const void *data)
{
struct super_block *s;
char *data_page = NULL;
@@ -154,11 +193,11 @@ static int __init do_mount_root(const char *name, const char *fs,
strscpy_pad(data_page, data, PAGE_SIZE);
}
- ret = init_mount(name, "/root", fs, flags, data_page);
+ ret = init_mount(name, dir, fs, flags, data_page);
if (ret)
goto out;
- init_chdir("/root");
+ init_chdir(dir);
s = current->fs->pwd.dentry->d_sb;
ROOT_DEV = s->s_dev;
printk(KERN_INFO
@@ -185,7 +224,7 @@ void __init mount_root_generic(char *name, char *pretty_name, int flags)
scnprintf(b, BDEVNAME_SIZE, "unknown-block(%u,%u)",
MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
if (root_fs_names)
- num_fs = split_fs_names(fs_names, PAGE_SIZE);
+ num_fs = split_fs_names(fs_names, PAGE_SIZE, root_fs_names);
else
num_fs = list_bdev_fs_names(fs_names, PAGE_SIZE);
retry:
@@ -194,7 +233,7 @@ void __init mount_root_generic(char *name, char *pretty_name, int flags)
if (!*p)
continue;
- err = do_mount_root(name, p, flags, root_mount_data);
+ err = do_mount_root(name, "/root", p, flags, root_mount_data);
switch (err) {
case 0:
goto out;
@@ -266,7 +305,8 @@ static void __init mount_nfs_root(void)
*/
timeout = NFSROOT_TIMEOUT_MIN;
for (try = 1; ; try++) {
- if (!do_mount_root(root_dev, "nfs", root_mountflags, root_data))
+ if (!do_mount_root(root_dev, "/root", "nfs", root_mountflags,
+ root_data))
return;
if (try > NFSROOT_RETRY_MAX)
break;
@@ -303,7 +343,7 @@ static void __init mount_cifs_root(void)
timeout = CIFSROOT_TIMEOUT_MIN;
for (try = 1; ; try++) {
- if (!do_mount_root(root_dev, "cifs", root_mountflags,
+ if (!do_mount_root(root_dev, "/root", "cifs", root_mountflags,
root_data))
return;
if (try > CIFSROOT_RETRY_MAX)
@@ -345,7 +385,7 @@ static int __init mount_nodev_root(char *root_device_name)
fs_names = kmalloc(PAGE_SIZE, GFP_KERNEL);
if (!fs_names)
return -EINVAL;
- num_fs = split_fs_names(fs_names, PAGE_SIZE);
+ num_fs = split_fs_names(fs_names, PAGE_SIZE, root_fs_names);
for (i = 0, fstype = fs_names; i < num_fs;
i++, fstype += strlen(fstype) + 1) {
@@ -353,8 +393,8 @@ static int __init mount_nodev_root(char *root_device_name)
continue;
if (!fs_is_nodev(fstype))
continue;
- err = do_mount_root(root_device_name, fstype, root_mountflags,
- root_mount_data);
+ err = do_mount_root(root_device_name, "/root", fstype,
+ root_mountflags, root_mount_data);
if (!err)
break;
}
@@ -402,6 +442,96 @@ void __init mount_root(char *root_device_name)
}
}
+/*
+ * Mount the actual root filesystem from the image file rootimage= on the
+ * filesystem that was just mounted from root= (the "carrier"), so that
+ * image-based systems can boot without an initramfs.
+ *
+ * Called with the carrier mounted at /root and the cwd there. The image
+ * is always mounted read-only; "ro"/"rw"/rootflags= keep applying to the
+ * carrier. On success the cwd is the image's root, ready for the pivot
+ * in prepare_namespace(). The carrier mount is moved to rootimagesrcdir=
+ * inside the image if set, and detached otherwise; either way the image
+ * mount keeps the carrier superblock pinned.
+ */
+static void __init mount_root_image(void)
+{
+ unsigned long flags = MS_RDONLY | MS_SILENT;
+ char *path, *fs_names, *p;
+ struct file *file;
+ int num_fs, i, err;
+
+ if (root_image[0] != '/')
+ panic("VFS: rootimage= must be an absolute path");
+
+ path = kmalloc(PATH_MAX, GFP_KERNEL);
+ fs_names = kmalloc(PAGE_SIZE, GFP_KERNEL);
+ if (!path || !fs_names)
+ panic("VFS: unable to mount root image: not enough memory");
+
+ if (snprintf(path, PATH_MAX, "/root%s", root_image) >= PATH_MAX)
+ panic("VFS: rootimage= path too long");
+
+ /*
+ * Nothing that could modify the carrier runs yet, so the image
+ * cannot change between this open and the mount below.
+ */
+ file = filp_open(path, O_RDONLY | O_LARGEFILE, 0);
+ if (IS_ERR(file))
+ panic("VFS: unable to open root image %s: error %ld",
+ root_image, PTR_ERR(file));
+
+ err = init_mkdir("/image", 0700);
+ if (err < 0 && err != -EEXIST)
+ panic("VFS: unable to create /image: error %d", err);
+
+ if (root_image_fs_names)
+ num_fs = split_fs_names(fs_names, PAGE_SIZE,
+ root_image_fs_names);
+ else
+ num_fs = list_bdev_fs_names(fs_names, PAGE_SIZE);
+
+ for (i = 0, p = fs_names; i < num_fs; i++, p += strlen(p) + 1) {
+ if (!*p)
+ continue;
+ err = do_mount_root(path, "/image", p, flags,
+ root_image_mount_data);
+ switch (err) {
+ case 0:
+ goto mounted;
+ case -EACCES:
+ case -EINVAL:
+ case -ENOTBLK:
+ continue;
+ }
+ panic("VFS: unable to mount root image %s: error %d",
+ root_image, err);
+ }
+ panic("VFS: no filesystem could mount root image %s", root_image);
+
+mounted:
+ fput(file);
+
+ if (root_image_srcdir) {
+ if (root_image_srcdir[0] != '/')
+ panic("VFS: rootimagesrcdir= must be an absolute path");
+ if (snprintf(path, PATH_MAX, ".%s", root_image_srcdir) >=
+ PATH_MAX)
+ panic("VFS: rootimagesrcdir= path too long");
+ err = init_mount("/root", path, NULL, MS_MOVE, NULL);
+ if (err)
+ pr_err("VFS: failed to move the root image's carrier filesystem to %s: error %d\n",
+ root_image_srcdir, err);
+ } else {
+ err = -EINVAL;
+ }
+ if (err)
+ init_umount("/root", MNT_DETACH);
+
+ kfree(path);
+ kfree(fs_names);
+}
+
/* wait for any asynchronous scanning to complete */
static void __init wait_for_root(char *root_device_name)
{
@@ -481,6 +611,8 @@ void __init prepare_namespace(void)
if (root_wait)
wait_for_root(saved_root_name);
mount_root(saved_root_name);
+ if (root_image)
+ mount_root_image();
devtmpfs_mount();
if (init_pivot_root(".", ".")) {
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [RFC PATCH 2/2] init: support pinning the root image's fsverity digest
2026-07-18 19:15 [RFC PATCH 0/2] init: boot image-based systems without an initramfs (rootimage=) Eric Curtin
2026-07-18 19:15 ` [RFC PATCH 1/2] init: support mounting the root filesystem from an image file Eric Curtin
@ 2026-07-18 19:15 ` Eric Curtin
1 sibling, 0 replies; 3+ messages in thread
From: Eric Curtin @ 2026-07-18 19:15 UTC (permalink / raw)
To: Alexander Viro, Christian Brauner
Cc: Jan Kara, Jonathan Corbet, Shuah Khan, Eric Biggers,
Theodore Y . Ts'o, Gao Xiang, Chao Yu, fsverity, linux-erofs,
linux-fsdevel, linux-doc, linux-kernel, Eric Curtin
When the root filesystem is mounted from an image file with rootimage=,
the carrier filesystem holding the image is typically writable and
therefore untrusted. Systems that seal their root images with fsverity
currently need an initramfs for the sole purpose of checking that the
image carries the expected fsverity digest before mounting it.
Add rootimageverity=<hash algorithm>:<hex digest>, which requires the
rootimage= file to have fsverity enabled with exactly this file digest
and fails the boot otherwise, using the same fsverity_get_digest()
interface that IMA and overlayfs already use for digest pinning.
Combined with a trusted kernel command line (e.g. a signed unified
kernel image, or a TPM-measured bootloader configuration), this extends
the chain of trust to every byte of the root filesystem without any
userspace boot stage: the digest pins the image's Merkle tree, and
fsverity keeps verifying all data read from the image against it at
runtime, so post-boot tampering with the carrier filesystem is detected
as well. It is the file-backed counterpart of setting up a dm-verity
target for a partition-backed root via dm-mod.create=.
Verification is done on the file the kernel is about to mount: it is
opened before mounting (which also loads the fsverity information) and
kept open across the mount, and no userspace exists yet that could race
a replacement in between.
Assisted-by: opencode:claude-fable-5
Signed-off-by: Eric Curtin <ericcurtin17@gmail.com>
---
.../admin-guide/kernel-parameters.txt | 13 ++++
init/do_mounts.c | 63 +++++++++++++++++++
2 files changed, 76 insertions(+)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 5dbd56098..105ebb171 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -6728,6 +6728,19 @@ Kernel parameters
root=) is moved to, instead of detaching it. Used
together with rootimage=.
+ rootimageverity= [KNL] Require the root image specified by
+ rootimage= to have fsverity enabled with this file
+ digest, given as <hash algorithm>:<hex digest>,
+ e.g. sha256:dd1b3fa9... The boot is aborted if the
+ image carries no or a different fsverity digest.
+ Because fsverity keeps verifying data read from the
+ image against its Merkle tree at runtime, a trusted
+ (e.g. signed or TPM-measured) kernel command line
+ extends the chain of trust to the complete root
+ filesystem contents without an initramfs. Requires
+ CONFIG_FS_VERITY and a carrier filesystem with
+ fsverity support.
+
rootwait [KNL] Wait (indefinitely) for root device to show up.
Useful for devices that are detected asynchronously
(e.g. USB and MMC devices).
diff --git a/init/do_mounts.c b/init/do_mounts.c
index 1b96ef30b..4eb792b27 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -24,6 +24,9 @@
#include <linux/nfs_fs_sb.h>
#include <linux/nfs_mount.h>
#include <linux/raid/detect.h>
+#include <linux/fsverity.h>
+#include <linux/hex.h>
+#include <crypto/hash_info.h>
#include <uapi/linux/mount.h>
#include "do_mounts.h"
@@ -155,10 +158,18 @@ static int __init root_image_srcdir_setup(char *str)
return 1;
}
+static char * __initdata root_image_verity;
+static int __init root_image_verity_setup(char *str)
+{
+ root_image_verity = str;
+ return 1;
+}
+
__setup("rootimage=", root_image_setup);
__setup("rootimagefstype=", root_image_fs_names_setup);
__setup("rootimageflags=", root_image_data_setup);
__setup("rootimagesrcdir=", root_image_srcdir_setup);
+__setup("rootimageverity=", root_image_verity_setup);
/* This can return zero length strings. Caller should check */
static int __init split_fs_names(char *page, size_t size, char *names)
@@ -442,6 +453,55 @@ void __init mount_root(char *root_device_name)
}
}
+#ifdef CONFIG_FS_VERITY
+/*
+ * Require the root image to carry the fsverity file digest given by
+ * rootimageverity=<hash algorithm>:<hex digest>. @file must have been
+ * opened so that its fsverity information is loaded. Any deviation
+ * fails the boot: with a trusted command line this pins the complete
+ * image contents, which fsverity keeps verifying against the image's
+ * Merkle tree as they are read.
+ */
+static void __init verify_root_image(struct file *file)
+{
+ u8 want[FS_VERITY_MAX_DIGEST_SIZE], got[FS_VERITY_MAX_DIGEST_SIZE];
+ enum hash_algo want_algo, got_algo;
+ int want_size, got_size, i;
+ char *hex;
+
+ hex = strchr(root_image_verity, ':');
+ if (!hex)
+ panic("VFS: rootimageverity= expects <algorithm>:<hex digest>");
+ *hex++ = '\0';
+ i = match_string(hash_algo_name, HASH_ALGO__LAST, root_image_verity);
+ if (i < 0)
+ panic("VFS: rootimageverity=: unknown hash algorithm \"%s\"",
+ root_image_verity);
+ want_algo = i;
+ want_size = hash_digest_size[want_algo];
+ if (strlen(hex) != 2 * want_size || hex2bin(want, hex, want_size))
+ panic("VFS: rootimageverity=: expected %d-byte hex digest",
+ want_size);
+
+ got_size = fsverity_get_digest(file_inode(file), got, NULL, &got_algo);
+ if (!got_size)
+ panic("VFS: root image does not have fsverity enabled");
+ if (got_algo != want_algo || got_size != want_size ||
+ memcmp(want, got, want_size))
+ panic("VFS: root image fsverity digest mismatch: expected %s:%*phN, got %s:%*phN",
+ hash_algo_name[want_algo], want_size, want,
+ hash_algo_name[got_algo], got_size, got);
+
+ pr_info("VFS: verified root image fsverity digest %s:%*phN\n",
+ hash_algo_name[want_algo], want_size, want);
+}
+#else /* !CONFIG_FS_VERITY */
+static void __init verify_root_image(struct file *file)
+{
+ panic("VFS: rootimageverity= requires CONFIG_FS_VERITY");
+}
+#endif /* !CONFIG_FS_VERITY */
+
/*
* Mount the actual root filesystem from the image file rootimage= on the
* filesystem that was just mounted from root= (the "carrier"), so that
@@ -481,6 +541,9 @@ static void __init mount_root_image(void)
panic("VFS: unable to open root image %s: error %ld",
root_image, PTR_ERR(file));
+ if (root_image_verity)
+ verify_root_image(file);
+
err = init_mkdir("/image", 0700);
if (err < 0 && err != -EEXIST)
panic("VFS: unable to create /image: error %d", err);
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-18 19:15 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-18 19:15 [RFC PATCH 0/2] init: boot image-based systems without an initramfs (rootimage=) Eric Curtin
2026-07-18 19:15 ` [RFC PATCH 1/2] init: support mounting the root filesystem from an image file Eric Curtin
2026-07-18 19:15 ` [RFC PATCH 2/2] init: support pinning the root image's fsverity digest Eric Curtin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox