commit dc63a086daee92c63e392e4e7cd7ed61f3693026 upstream.
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 Signed-off-by: Jason A. Donenfeld Jason@zx2c4.com --- Greg - this has a "Fixes" tag and has been in Linus' tree for a while, and it applies without anything special, but for some reason didn't make it to 6.0.y, and I'm not sure why. So sending it to you manually. But I'd be curious to learn why the scripts missed this one. -Jason
arch/m68k/include/uapi/asm/bootinfo-virt.h | 9 ++------- arch/m68k/include/uapi/asm/bootinfo.h | 7 +++++++ arch/m68k/kernel/setup_mm.c | 12 ++++++++++++ arch/m68k/virt/config.c | 11 ----------- 4 files changed, 21 insertions(+), 18 deletions(-)
diff --git a/arch/m68k/include/uapi/asm/bootinfo-virt.h b/arch/m68k/include/uapi/asm/bootinfo-virt.h index b091ee9b06e0..7dbcd7bec103 100644 --- a/arch/m68k/include/uapi/asm/bootinfo-virt.h +++ b/arch/m68k/include/uapi/asm/bootinfo-virt.h @@ -13,13 +13,8 @@ #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)
diff --git a/arch/m68k/include/uapi/asm/bootinfo.h b/arch/m68k/include/uapi/asm/bootinfo.h index 95ecf3ae4c49..024e87d7095f 100644 --- a/arch/m68k/include/uapi/asm/bootinfo.h +++ b/arch/m68k/include/uapi/asm/bootinfo.h @@ -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
/* diff --git a/arch/m68k/kernel/setup_mm.c b/arch/m68k/kernel/setup_mm.c index 7e7ef67cff8b..e45cc9923703 100644 --- a/arch/m68k/kernel/setup_mm.c +++ b/arch/m68k/kernel/setup_mm.c @@ -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); diff --git a/arch/m68k/virt/config.c b/arch/m68k/virt/config.c index 4ab22946ff68..632ba200ad42 100644 --- a/arch/m68k/virt/config.c +++ b/arch/m68k/virt/config.c @@ -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;
On Fri, Nov 11, 2022 at 02:44:40AM +0100, Jason A. Donenfeld wrote:
commit dc63a086daee92c63e392e4e7cd7ed61f3693026 upstream.
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 Signed-off-by: Jason A. Donenfeld Jason@zx2c4.com
Greg - this has a "Fixes" tag and has been in Linus' tree for a while, and it applies without anything special, but for some reason didn't make it to 6.0.y, and I'm not sure why. So sending it to you manually. But I'd be curious to learn why the scripts missed this one. -Jason
We do not always take commits with only "Fixes:" tags on it. If you know you want this in a stable tree, add the proper cc: stable tag on the patch. That's been the documented way for 18+ years now :)
Sometimes when we get bored, we do run scripts that sweep the commit logs and pick up patches with only "Fixes:" on it, but I've been busy with other work these past weeks and have not done so, which is why this was not picked up.
thanks,
greg k-h
linux-stable-mirror@lists.linaro.org