mirror_ubuntu-kernels/drivers/firmware/efi/libstub
Ard Biesheuvel ec93fc371f efi/libstub: Add support for loading the initrd from a device path
There are currently two ways to specify the initrd to be passed to the
Linux kernel when booting via the EFI stub:
- it can be passed as a initrd= command line option when doing a pure PE
  boot (as opposed to the EFI handover protocol that exists for x86)
- otherwise, the bootloader or firmware can load the initrd into memory,
  and pass the address and size via the bootparams struct (x86) or
  device tree (ARM)

In the first case, we are limited to loading from the same file system
that the kernel was loaded from, and it is also problematic in a trusted
boot context, given that we cannot easily protect the command line from
tampering without either adding complicated white/blacklisting of boot
arguments or locking down the command line altogether.

In the second case, we force the bootloader to duplicate knowledge about
the boot protocol which is already encoded in the stub, and which may be
subject to change over time, e.g., bootparams struct definitions, memory
allocation/alignment requirements for the placement of the initrd etc etc.
In the ARM case, it also requires the bootloader to modify the hardware
description provided by the firmware, as it is passed in the same file.
On systems where the initrd is measured after loading, it creates a time
window where the initrd contents might be manipulated in memory before
handing over to the kernel.

Address these concerns by adding support for loading the initrd into
memory by invoking the EFI LoadFile2 protocol installed on a vendor
GUIDed device path that specifically designates a Linux initrd.
This addresses the above concerns, by putting the EFI stub in charge of
placement in memory and of passing the base and size to the kernel proper
(via whatever means it desires) while still leaving it up to the firmware
or bootloader to obtain the file contents, potentially from other file
systems than the one the kernel itself was loaded from. On platforms that
implement measured boot, it permits the firmware to take the measurement
right before the kernel actually consumes the contents.

Acked-by: Laszlo Ersek <lersek@redhat.com>
Tested-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2020-02-23 21:59:42 +01:00
..
arm32-stub.c efi/libstub/arm: Make efi_entry() an ordinary PE/COFF entrypoint 2020-02-22 23:37:37 +01:00
arm64-stub.c efi/libstub: Use hidden visibility for all source files 2020-02-23 21:57:12 +01:00
arm-stub.c efi/libstub: Add support for loading the initrd from a device path 2020-02-23 21:59:42 +01:00
efi-stub-helper.c efi/libstub: Add support for loading the initrd from a device path 2020-02-23 21:59:42 +01:00
efistub.h efi/libstub: Add support for loading the initrd from a device path 2020-02-23 21:59:42 +01:00
fdt.c efi/libstub: Simplify efi_high_alloc() and rename to efi_allocate_pages() 2020-02-23 21:57:15 +01:00
file.c efi/libstub: Fix error message in handle_cmdline_files() 2020-02-23 21:57:31 +01:00
gop.c efi/libstub: Rename efi_call_early/_runtime macros to be more intuitive 2019-12-25 10:49:25 +01:00
hidden.h efi/libstub: Use hidden visibility for all source files 2020-02-23 21:57:12 +01:00
Makefile efi/libstub: Clean up command line parsing routine 2020-02-23 21:57:15 +01:00
mem.c efi/libstub: Describe efi_relocate_kernel() 2020-02-23 21:57:15 +01:00
pci.c efi: Allow disabling PCI busmastering on bridges during boot 2020-01-10 18:55:04 +01:00
random.c efi/libstub: Describe RNG functions 2020-02-23 21:57:19 +01:00
randomalloc.c efi/libstub: Move efi_random_alloc() into separate source file 2020-02-23 21:57:15 +01:00
secureboot.c efi/libstub: Rename efi_call_early/_runtime macros to be more intuitive 2019-12-25 10:49:25 +01:00
skip_spaces.c efi/libstub: Clean up command line parsing routine 2020-02-23 21:57:15 +01:00
string.c efi/libstub: Clean up command line parsing routine 2020-02-23 21:57:15 +01:00
tpm.c efi/libstub: Rename efi_call_early/_runtime macros to be more intuitive 2019-12-25 10:49:25 +01:00
x86-stub.c efi/libstub: Add support for loading the initrd from a device path 2020-02-23 21:59:42 +01:00