]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
x86: efi/random: Invoke EFI_RNG_PROTOCOL to seed the UEFI RNG table
authorDominik Brodowski <linux@dominikbrodowski.net>
Wed, 6 Nov 2019 07:06:13 +0000 (08:06 +0100)
committerArd Biesheuvel <ardb@kernel.org>
Thu, 7 Nov 2019 09:18:45 +0000 (10:18 +0100)
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.

Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
arch/x86/boot/compressed/eboot.c
drivers/firmware/efi/libstub/Makefile
drivers/firmware/efi/libstub/efistub.h
include/linux/efi.h

index 82bc60c8acb240c29f925df7dde03ac724edf3b4..68945c5700bf85d3998bbe6e75840084954fe383 100644 (file)
@@ -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);
index ee0661ddb25bb6a9e74f52e5c2cced5e85f632c7..c35f893897e146e0cd43f4afe45046f83ce636ce 100644 (file)
@@ -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
index 7f1556fd867df32f783579f4f40c82654e0864fa..05739ae013c8283e6c7ef5f3134fe77b9df249b7 100644 (file)
@@ -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: */
index d87acf62958e207f941080c251048c9215df834e..028efa7a9f3bc32eb7523eeba934c6df7da3d351 100644 (file)
@@ -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);
 
 /*