]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
efi: random: reduce seed size to 32 bytes
authorArd Biesheuvel <ardb@kernel.org>
Thu, 20 Oct 2022 08:39:08 +0000 (10:39 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Nov 2022 16:57:55 +0000 (17:57 +0100)
commit 161a438d730dade2ba2b1bf8785f0759aba4ca5f upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/firmware/efi/efi.c
include/linux/efi.h

index 8fd74a7501d40d37615fbca9775d8c3219427c8d..ac9fb336c80ffab6b9b0b91d803f4bf24f3482b6 100644 (file)
@@ -546,7 +546,7 @@ int __init efi_config_parse_tables(void *config_tables, int count, int sz,
 
                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 f9b9f9a2fd4a505354eb86ac6a9636e8a5c90cd7..880cd86c829df1d8a5fde5fc6bffb9a5f7e17ba8 100644 (file)
@@ -1715,7 +1715,7 @@ efi_status_t efi_exit_boot_services(efi_system_table_t *sys_table,
                                    void *priv,
                                    efi_exit_boot_map_processing priv_func);
 
-#define EFI_RANDOM_SEED_SIZE           64U
+#define EFI_RANDOM_SEED_SIZE           32U // BLAKE2S_HASH_SIZE
 
 struct linux_efi_random_seed {
        u32     size;