linux_dsm_epyc7002/drivers/firmware
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
..
arm_scmi drivers: firmware: scmi: Extend SCMI transport layer by trace events 2019-12-30 12:34:37 +00:00
broadcom ioremap changes for 5.6 2020-01-27 13:03:00 -08:00
efi efi/libstub: Add support for loading the initrd from a device path 2020-02-23 21:59:42 +01:00
google firmware: google: Probe for a GSMI handler in firmware 2020-01-14 21:46:48 +01:00
imx firmware: imx: Allow IMX DSP to be selected as module 2020-01-09 17:21:33 +08:00
meson firmware: meson_sm: use %*ph to print small buffer 2019-10-03 08:43:33 -07:00
psci firmware: psci: Export functions to manage the OSI mode 2020-01-02 16:49:59 +01:00
tegra firmware: tegra: Move BPMP resume to noirq phase 2019-10-01 16:38:45 +02:00
xilinx ARM: SoC-related driver updates 2020-02-08 14:04:19 -08:00
arm_scpi.c firmware: arm_scpi: convert platform driver to use dev_groups 2019-08-02 13:18:42 +02:00
arm_sdei.c firmware: arm_sdei: use common SMCCC_CONDUIT_* 2019-10-14 10:55:14 +01:00
dmi_scan.c firmware: dmi: Add dmi_memdev_handle 2019-12-03 11:20:37 +01:00
dmi-id.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 191 2019-05-30 11:29:21 -07:00
dmi-sysfs.c treewide: Add SPDX license identifier for more missed files 2019-05-21 10:50:45 +02:00
edd.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 287 2019-06-05 17:36:37 +02:00
iscsi_ibft_find.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 287 2019-06-05 17:36:37 +02:00
iscsi_ibft.c iscsi_ibft: Don't limits Targets and NICs to two 2020-01-12 13:16:04 -05:00
Kconfig firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
Makefile firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
memmap.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 287 2019-06-05 17:36:37 +02:00
pcdp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
pcdp.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
qcom_scm-legacy.c firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
qcom_scm-smc.c firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
qcom_scm.c firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
qcom_scm.h firmware: qcom_scm: Dynamically support SMCCC and legacy conventions 2020-01-07 22:14:43 -08:00
qemu_fw_cfg.c
raspberrypi.c firmware: raspberrypi: register clk device 2019-06-25 16:04:26 -07:00
scpi_pm_domain.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 201 2019-05-30 11:29:52 -07:00
stratix10-rsu.c firmware: Fix incompatible function behavior for RSU driver 2019-11-14 13:11:32 +08:00
stratix10-svc.c firmware: stratix10-svc: Remove unneeded semicolon 2020-01-14 21:46:48 +01:00
ti_sci.c firmware: ti_sci: Allow for device shared and exclusive requests 2019-09-04 20:44:33 +02:00
ti_sci.h ARM: SoC-related driver updates 2019-07-19 17:13:56 -07:00
trusted_foundations.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 157 2019-05-30 11:26:37 -07:00
turris-mox-rwtm.c firmware: turris-mox-rwtm: small white space cleanup 2020-01-08 10:35:23 +01:00