EFI updates for v5.5
Ard Biesheuvel
maintainerThe following changes since commit a99d8080aaf358d5d23581244e5da23b35e340b9:
Linux 5.4-rc6 (2019-11-03 14:07:26 -0800)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git tags/efi-next
for you to fetch changes up to d99c1ba6a73b9e93e2884b7893fe19e3c082ba03:
efi: libstub/tpm: enable tpm eventlog function for ARM platforms (2019-11-07 10:18:45 +0100)
----------------------------------------------------------------
EFI changes for v5.5:
- Change my email address to @kernel.org so I am no longer at the mercy of useless corporate email infrastructure
- Wire up the EFI RNG code for x86. This enables an additional source of entropy during early boot.
- Enable the TPM event log code on ARM platforms.
----------------------------------------------------------------
Ard Biesheuvel (1):
MAINTAINERS: update Ard's email address to @kernel.org
Dominik Brodowski (2):
efi/random: use arch-independent efi_call_proto()
x86: efi/random: Invoke EFI_RNG_PROTOCOL to seed the UEFI RNG table
Xinwei Kong (1):
efi: libstub/tpm: enable tpm eventlog function for ARM platforms
.mailmap | 1 + MAINTAINERS | 8 ++++---- arch/x86/boot/compressed/eboot.c | 3 +++ drivers/firmware/efi/libstub/Makefile | 5 +++-- drivers/firmware/efi/libstub/arm-stub.c | 2 ++ drivers/firmware/efi/libstub/efistub.h | 2 -- drivers/firmware/efi/libstub/random.c | 23 ++++++++++++++++++----- include/linux/efi.h | 2 ++ 8 files changed, 33 insertions(+), 13 deletions(-)
Ard Biesheuvel
maintainerPATCH 1/4 MAINTAINERS: update Ard's email address to @kernel.org
--- .mailmap | 1 + MAINTAINERS | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-)
.mailmap +1 -0
@@ -32,6 +32,7 @@ Andy Adamson <[email protected]> Antoine Tenart <[email protected]> Antonio Ospite <[email protected]> <[email protected]> Archit Taneja <[email protected]> +Ard Biesheuvel <[email protected]> <[email protected]> Arnaud Patard <[email protected]> Arnd Bergmann <[email protected]> Axel Dyks <[email protected]>
MAINTAINERS +4 -4
@@ -6003,14 +6003,14 @@ F: sound/usb/misc/ua101.c EFI TEST DRIVER L: [email protected] M: Ivan Hu <[email protected]> -M: Ard Biesheuvel <[email protected]> +M: Ard Biesheuvel <[email protected]> S: Maintained F: drivers/firmware/efi/test/ EFI VARIABLE FILESYSTEM M: Matthew Garrett <[email protected]> M: Jeremy Kerr <[email protected]> -M: Ard Biesheuvel <[email protected]> +M: Ard Biesheuvel <[email protected]> T: git git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git L: [email protected] S: Maintained
@@ -6189,7 +6189,7 @@ S: Supported F: security/integrity/evm/ EXTENSIBLE FIRMWARE INTERFACE (EFI) -M: Ard Biesheuvel <[email protected]> +M: Ard Biesheuvel <[email protected]> L: [email protected] T: git git://git.kernel.org/pub/scm/linux/kernel/git/efi/efi.git S: Maintained
@@ -15006,7 +15006,7 @@ F: include/media/soc_camera.h F: drivers/staging/media/soc_camera/ SOCIONEXT SYNQUACER I2C DRIVER -M: Ard Biesheuvel <[email protected]> +M: Ard Biesheuvel <[email protected]> L: [email protected] S: Maintained F: drivers/i2c/busses/i2c-synquacer.c
Signature · 1 line
2.17.1
Ard Biesheuvel
maintainerPATCH 2/4 efi/random: use arch-independent efi_call_proto()
In reply to Ard BiesheuvelFrom: Dominik Brodowski <[email protected]>
To handle all arch-specific peculiarities when calling an EFI protocol function, a wrapper efi_call_proto() exists on all relevant architectures. On arm/arm64, this is merely a plain function call. On x86, a special EFI entry stub needs to be used, however, as the calling convention differs. To make the efi/random stub arch-independent, use efi_call_proto() instead of the existing non-portable calls to the EFI get_rng protocol function. This also requires the addition of some typedefs.
--- drivers/firmware/efi/libstub/random.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-)
drivers/firmware/efi/libstub/random.c +18 -5
@@ -9,6 +9,18 @@#include "efistub.h" +typedef struct efi_rng_protocol efi_rng_protocol_t ; + +typedef struct { +u32 get_info; +u32 get_rng; +}efi_rng_protocol_32_t ; + +typedef struct { +u64 get_info; +u64 get_rng; +}efi_rng_protocol_64_t ; +struct efi_rng_protocol {efi_status_t (*get_info)(struct efi_rng_protocol *,unsigned long *,efi_guid_t *);
@@ -28,7 +40,7 @@ efi_status_t efi_get_random_bytes(efi_system_table_t *sys_table_arg,if (status !=EFI_SUCCESS )return status; -return rng->get_rng (rng,NULL , size, out); +return efi_call_proto (efi_rng_protocol, get_rng, rng,NULL , size, out); }/*
@@ -161,15 +173,16 @@ efi_status_t efi_random_get_seed(efi_system_table_t *sys_table_arg)if (status !=EFI_SUCCESS )return status; - status = rng->get_rng (rng, &rng_algo_raw,EFI_RANDOM_SEED_SIZE , - seed->bits); + status =efi_call_proto (efi_rng_protocol, get_rng, rng, &rng_algo_raw, +EFI_RANDOM_SEED_SIZE , seed->bits); +if (status ==EFI_UNSUPPORTED )/* * Use whatever algorithm we have available if the raw algorithm * is not implemented. */ - status = rng->get_rng (rng,NULL ,EFI_RANDOM_SEED_SIZE , - seed->bits); + status =efi_call_proto (efi_rng_protocol, get_rng, rng,NULL , +EFI_RANDOM_SEED_SIZE , seed->bits);if (status !=EFI_SUCCESS ) goto err_freepool;
Signature · 1 line
2.17.1
Ard Biesheuvel
maintainerPATCH 3/4 x86: efi/random: Invoke EFI_RNG_PROTOCOL to seed the UEFI RNG table
In reply to Ard BiesheuvelFrom: Dominik Brodowski <[email protected]>
Invoke the EFI_RNG_PROTOCOL protocol in the context of the x86 EFI stub, same as is done on arm/arm64 since commit 568bc4e87033 ("efi/arm*/libstub:
Invoke EFI_RNG_PROTOCOL to seed the UEFI RNG table"). Within the stub, a Linux-specific RNG seed UEFI config table will be seeded. The EFI routines in the core kernel will pick that up later, yet still early during boot, to seed the kernel entropy pool. If CONFIG_RANDOM_TRUST_BOOTLOADER, entropy is credited for this seed.
--- arch/x86/boot/compressed/eboot.c | 3 +++ drivers/firmware/efi/libstub/Makefile | 5 +++-- drivers/firmware/efi/libstub/efistub.h | 2 -- include/linux/efi.h | 2 ++ 4 files changed, 8 insertions(+), 4 deletions(-)
arch/x86/boot/compressed/eboot.c +3 -0
@@ -782,6 +782,9 @@ efi_main(struct efi_config *c, struct boot_params *boot_params)/* Ask the firmware to clear memory on unclean shutdown */ efi_enable_reset_attack_mitigation (sys_table); + +efi_random_get_seed (sys_table); +efi_retrieve_tpm2_eventlog (sys_table);setup_graphics (boot_params);
drivers/firmware/efi/libstub/Makefile +3 -2
@@ -38,7 +38,8 @@ OBJECT_FILES_NON_STANDARD := y # Prevents link failures: __sanitizer_cov_trace_pc() is not linked in. KCOV_INSTRUMENT := n -lib-y := efi-stub-helper.o gop.o secureboot.o tpm.o +lib-y := efi-stub-helper.o gop.o secureboot.o tpm.o \ + random.o # include the stub's generic dependencies from lib/ when building for ARM/arm64 arm-deps-y := fdt_rw.c fdt_ro.c fdt_wip.c fdt.c fdt_empty_tree.c fdt_sw.c
@@ -47,7 +48,7 @@ arm-deps-$(CONFIG_ARM64) += sort.c $(obj)/lib-%.o: $(srctree)/lib/%.c FORCE $(call if_changed_rule,cc_o_c) -lib-$(CONFIG_EFI_ARMSTUB) += arm-stub.o fdt.o string.o random.o \ +lib-$(CONFIG_EFI_ARMSTUB) += arm-stub.o fdt.o string.o \ $(patsubst %.c,lib-%.o,$(arm-deps-y)) lib-$(CONFIG_ARM) += arm32-stub.o
drivers/firmware/efi/libstub/efistub.h +0 -2
@@ -63,8 +63,6 @@ efi_status_t efi_random_alloc(efi_system_table_t *sys_table_arg,efi_status_t check_platform_features (efi_system_table_t *sys_table_arg); -efi_status_t efi_random_get_seed (efi_system_table_t *sys_table_arg); -void *get_efi_config_table (efi_system_table_t *sys_table,efi_guid_t guid);/* Helper macros for the usual case of using simple C variables: */
include/linux/efi.h +2 -0
@@ -1645,6 +1645,8 @@ static inline void efi_enable_reset_attack_mitigation(efi_system_table_t *sys_table_arg) { }#endif +efi_status_t efi_random_get_seed (efi_system_table_t *sys_table_arg); +void efi_retrieve_tpm2_eventlog (efi_system_table_t *sys_table);/*
Signature · 1 line
2.17.1
Ard Biesheuvel
maintainerPATCH 4/4 efi: libstub/tpm: enable tpm eventlog function for ARM platforms
In reply to Ard BiesheuvelFrom: Xinwei Kong <[email protected]>
Wire up the existing code for ARM that loads the TPM event log into OS accessible buffers while running the EFI stub so that the kernel proper can access it at runtime.
--- drivers/firmware/efi/libstub/arm-stub.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/firmware/efi/libstub/arm-stub.c +2 -0
@@ -189,6 +189,8 @@ unsigned long efi_entry(void *handle, efi_system_table_t *sys_table, goto fail_free_cmdline; } +efi_retrieve_tpm2_eventlog (sys_table); +/* Ask the firmware to clear memory on unclean shutdown */ efi_enable_reset_attack_mitigation (sys_table);
Signature · 1 line
2.17.1