Re: [PATCH v3] initramfs: Expose retained initrd as sysfs file

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 09.12.23 04:51, Bagas Sanjaya wrote:
On Thu, Dec 07, 2023 at 11:56:54PM +0000, Alexander Graf wrote:
When the kernel command line option "retain_initrd" is set, we do not
free the initrd memory. However, we also don't expose it to anyone for
consumption. That leaves us in a weird situation where the only user of
this feature is ppc64 and arm64 specific kexec tooling.

To make it more generally useful, this patch adds a kobject to the
firmware object that contains the initrd context when "retain_initrd"
is set. That way, we can access the initrd any time after boot from
user space and for example hand it into kexec as --initrd parameter
if we want to reboot the same initrd. Or inspect it directly locally.

With this patch applied, there is a new /sys/firmware/initrd file when
the kernel was booted with an initrd and "retain_initrd" command line
option is set.

Signed-off-by: Alexander Graf <graf@xxxxxxxxxx>
Tested-by: Bagas Sanjaya <bagasdotme@xxxxxxxxx>

---

v1 -> v2:

   - Reword commit message to explain the new file path
   - Add a Documentation/ABI/testing/sysfs-firmware-initrd file

v2 -> v3:

   - Only expose file when initrd is present (James Gowans)
---
  .../ABI/testing/sysfs-firmware-initrd          |  8 ++++++++
  .../admin-guide/kernel-parameters.txt          |  5 +++--
  init/initramfs.c                               | 18 +++++++++++++++++-
  3 files changed, 28 insertions(+), 3 deletions(-)
  create mode 100644 Documentation/ABI/testing/sysfs-firmware-initrd

diff --git a/Documentation/ABI/testing/sysfs-firmware-initrd b/Documentation/ABI/testing/sysfs-firmware-initrd
new file mode 100644
index 000000000000..20bf7cf77a19
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-firmware-initrd
@@ -0,0 +1,8 @@
+What:		/sys/firmware/initrd
+Date:		December 2023
+Contact:	Alexander Graf <graf@xxxxxxxxxx>
+Description:
+		When the kernel was booted with an initrd and the
+		"retain_initrd" option is set on the kernel command
+		line, /sys/firmware/initrd contains the contents of the
+		initrd that the kernel was booted with.
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 65731b060e3f..51575cd31741 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -2438,7 +2438,7 @@
  			between unregistering the boot console and initializing
  			the real console.
- keepinitrd [HW,ARM]
+	keepinitrd	[HW,ARM] See retain_initrd.
kernelcore= [KNL,X86,IA-64,PPC]
  			Format: nn[KMGTPE] | nn% | "mirror"
@@ -5580,7 +5580,8 @@
  			Useful for devices that are detected asynchronously
  			(e.g. USB and MMC devices).
- retain_initrd [RAM] Keep initrd memory after extraction
+	retain_initrd	[RAM] Keep initrd memory after extraction. After boot, it will
+			be accessible via /sys/firmware/initrd.
retbleed= [X86] Control mitigation of RETBleed (Arbitrary
  			Speculative Code Execution with Return Instructions)
You may want to adjust documentation to address my testing [1]. In summary,
only the first initrd blob that was passed to the kernel will be exposed
in /sys/firmware/initrd.


From the kernel's point of view, there is only a single initrd binary :). Whether your boot loader concatenates multiple archives to create that single one out of multiple individual files is a boot loader implementation detail.

Alex





Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
Sitz: Berlin
Ust-ID: DE 289 237 879






[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux