History

efi: random: reduce seed size to 32 bytes

We no longer need at least 64 bytes of random seed to permit the early crng init to complete. The RNG is now based on Blake2s, so reduce the EFI seed size to the Blake2s hash size, which is sufficient for our purposes. While at it, drop the READ_ONCE(), which was supposed to prevent size from being evaluated after seed was unmapped. However, this cannot actually happen, so READ_ONCE() is unnecessary here.

Ard Biesheuvel committed 4 years ago

Commit 161a4381 parent f4cd18c2 files · +2 −2Browse files

Unified · Split

2 files
  1. drivers/firmware/efi/efi.c +1 −1
  2. include/linux/efi.h +1 −1
drivers/firmware/efi/efi.c+1−1
@@ -611,7 +611,7 @@ int __init efi_config_parse_tables(const efi_config_table_t *config_tables, · 610 unmodified lines
611611
612612 seed = early_memremap(efi_rng_seed, sizeof(*seed));
613613 if (seed != NULL) {
614− size = READ_ONCE(seed->size);
614+ size = min(seed->size, EFI_RANDOM_SEED_SIZE);
615615 early_memunmap(seed, sizeof(*seed));
616616 } else {
617617 pr_err("Could not map UEFI random seed!\n");
include/linux/efi.h+1−1
@@ -1222,7 +1222,7 @@ efi_status_t efi_random_get_seed(void); · 1221 unmodified lines
12221222 arch_efi_call_virt_teardown(); \
12231223 })
12241224
1225−#define EFI_RANDOM_SEED_SIZE 64U
1225+#define EFI_RANDOM_SEED_SIZE 32U // BLAKE2S_HASH_SIZE
12261226
12271227 struct linux_efi_random_seed {
12281228 u32 size;