]> git.itanic.dy.fi Git - linux-stable/commitdiff
m68k: Rework BI_VIRT_RNG_SEED as BI_RNG_SEED
authorJason A. Donenfeld <Jason@zx2c4.com>
Tue, 27 Sep 2022 13:08:35 +0000 (15:08 +0200)
committerGeert Uytterhoeven <geert@linux-m68k.org>
Wed, 28 Sep 2022 20:16:44 +0000 (22:16 +0200)
This is useful on !virt platforms for kexec, so change things from
BI_VIRT_RNG_SEED to be BI_RNG_SEED, and simply remove BI_VIRT_RNG_SEED
because it only ever lasted one release, and nothing is broken by not
having it. At the same time, keep a comment noting that it's been
removed, so that ID isn't reused. In addition, we previously documented
2-byte alignment, but 4-byte alignment is actually necessary, so update
that comment.

Suggested-by: Geert Uytterhoeven <geert@linux-m68k.org>
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-2-Jason@zx2c4.com
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
arch/m68k/include/uapi/asm/bootinfo-virt.h
arch/m68k/include/uapi/asm/bootinfo.h
arch/m68k/kernel/setup_mm.c
arch/m68k/virt/config.c

index b091ee9b06e05ba4dec172fa47fed5a29dc1d687..7dbcd7bec103446de14401831395d915b257f577 100644 (file)
 #define BI_VIRT_VIRTIO_BASE    0x8004
 #define BI_VIRT_CTRL_BASE      0x8005
 
-/*
- * A random seed used to initialize the RNG. Record format:
- *
- *   - length       [ 2 bytes, 16-bit big endian ]
- *   - seed data    [ `length` bytes, padded to preserve 2-byte alignment ]
- */
-#define BI_VIRT_RNG_SEED       0x8006
+/* No longer used -- replaced with BI_RNG_SEED -- but don't reuse this index:
+ * #define BI_VIRT_RNG_SEED    0x8006 */
 
 #define VIRT_BOOTI_VERSION     MK_BI_VERSION(2, 0)
 
index 95ecf3ae4c49ffaf163ab64560009d1ff15e3052..024e87d7095f8feffe13084f47592219c323e690 100644 (file)
@@ -64,6 +64,13 @@ struct mem_info {
                                        /* (struct mem_info) */
 #define BI_COMMAND_LINE                0x0007  /* kernel command line parameters */
                                        /* (string) */
+/*
+ * A random seed used to initialize the RNG. Record format:
+ *
+ *   - length       [ 2 bytes, 16-bit big endian ]
+ *   - seed data    [ `length` bytes, padded to preserve 4-byte struct alignment ]
+ */
+#define BI_RNG_SEED            0x0008
 
 
     /*
index 78967c96ee8fe8c39a95bd758a433952ff8347ec..3a2bb2e8fdad47b44f3ff442325d3d7582eaea4b 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/module.h>
 #include <linux/nvram.h>
 #include <linux/initrd.h>
+#include <linux/random.h>
 
 #include <asm/bootinfo.h>
 #include <asm/byteorder.h>
@@ -151,6 +152,17 @@ static void __init m68k_parse_bootinfo(const struct bi_record *record)
                                sizeof(m68k_command_line));
                        break;
 
+               case BI_RNG_SEED: {
+                       u16 len = be16_to_cpup(data);
+                       add_bootloader_randomness(data + 2, len);
+                       /*
+                        * Zero the data to preserve forward secrecy, and zero the
+                        * length to prevent kexec from using it.
+                        */
+                       memzero_explicit((void *)data, len + 2);
+                       break;
+               }
+
                default:
                        if (MACH_IS_AMIGA)
                                unknown = amiga_parse_bootinfo(record);
index 4ab22946ff68fec81b8f2fc45b029b99fa51b179..632ba200ad425245eb22f0f73b15307e523b0cd5 100644 (file)
@@ -2,7 +2,6 @@
 
 #include <linux/reboot.h>
 #include <linux/serial_core.h>
-#include <linux/random.h>
 #include <clocksource/timer-goldfish.h>
 
 #include <asm/bootinfo.h>
@@ -93,16 +92,6 @@ int __init virt_parse_bootinfo(const struct bi_record *record)
                data += 4;
                virt_bi_data.virtio.irq = be32_to_cpup(data);
                break;
-       case BI_VIRT_RNG_SEED: {
-               u16 len = be16_to_cpup(data);
-               add_bootloader_randomness(data + 2, len);
-               /*
-                * Zero the data to preserve forward secrecy, and zero the
-                * length to prevent kexec from using it.
-                */
-               memzero_explicit((void *)data, len + 2);
-               break;
-       }
        default:
                unknown = 1;
                break;