efi: random: reduce seed size to 32 bytes
authorArd Biesheuvel <ardb@kernel.org>
Thu, 20 Oct 2022 08:39:08 +0000 (10:39 +0200)
committerArd Biesheuvel <ardb@kernel.org>
Mon, 24 Oct 2022 08:21:02 +0000 (10:21 +0200)
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.

Cc: <stable@vger.kernel.org> # v4.14+
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Reviewed-by: Jason A. Donenfeld <Jason@zx2c4.com>
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
drivers/firmware/efi/efi.c
include/linux/efi.h

index 3ecdc43a3f2bb3961199c6729434c99c5b030ce6..a46df5d1d0942751635276f6f1dc2710305ffae1 100644 (file)
@@ -611,7 +611,7 @@ int __init efi_config_parse_tables(const efi_config_table_t *config_tables,
 
                seed = early_memremap(efi_rng_seed, sizeof(*seed));
                if (seed != NULL) {
-                       size = READ_ONCE(seed->size);
+                       size = min(seed->size, EFI_RANDOM_SEED_SIZE);
                        early_memunmap(seed, sizeof(*seed));
                } else {
                        pr_err("Could not map UEFI random seed!\n");
index 80f3c1c7827dd2d66a1d9f2abe5b683978df643b..929d559ad41d29c6027dd825343b38c69d986e46 100644 (file)
@@ -1222,7 +1222,7 @@ efi_status_t efi_random_get_seed(void);
        arch_efi_call_virt_teardown();                                  \
 })
 
-#define EFI_RANDOM_SEED_SIZE           64U
+#define EFI_RANDOM_SEED_SIZE           32U // BLAKE2S_HASH_SIZE
 
 struct linux_efi_random_seed {
        u32     size;