]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
m68k: Process bootinfo records before saving them
authorJason A. Donenfeld <Jason@zx2c4.com>
Tue, 27 Sep 2022 13:08:34 +0000 (15:08 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 21 Oct 2022 10:38:01 +0000 (12:38 +0200)
[ Upstream commit 7c236d93c6764dcaca7ab66d76768a044647876d ]

The RNG seed boot record is memzeroed after processing, in order to
preserve forward secrecy. By saving the bootinfo for procfs prior to
that, forward secrecy is violated, since it becomes possible to recover
past states. So, save the bootinfo block only after first processing
them.

Fixes: a1ee38ab1a75 ("m68k: virt: Use RNG seed from bootinfo block")
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Link: https://lore.kernel.org/r/20220927130835.1629806-1-Jason@zx2c4.com
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/m68k/kernel/setup_mm.c

index e62fa8f2149b3574df6bed602e28571aa7d73d0c..7e7ef67cff8b2f6b27585b5f8fd61a2152f46791 100644 (file)
@@ -109,10 +109,9 @@ extern void paging_init(void);
 
 static void __init m68k_parse_bootinfo(const struct bi_record *record)
 {
+       const struct bi_record *first_record = record;
        uint16_t tag;
 
-       save_bootinfo(record);
-
        while ((tag = be16_to_cpu(record->tag)) != BI_LAST) {
                int unknown = 0;
                const void *data = record->data;
@@ -182,6 +181,8 @@ static void __init m68k_parse_bootinfo(const struct bi_record *record)
                record = (struct bi_record *)((unsigned long)record + size);
        }
 
+       save_bootinfo(first_record);
+
        m68k_realnum_memory = m68k_num_memory;
 #ifdef CONFIG_SINGLE_MEMORY_CHUNK
        if (m68k_num_memory > 1) {