* [PATCH v2 1/2] m68k: process bootinfo records before saving them
@ 2022-09-23 12:28 Jason A. Donenfeld
2022-09-23 12:28 ` [PATCH v2 2/2] m68k: virt: generate new RNG seed on reboot Jason A. Donenfeld
0 siblings, 1 reply; 3+ messages in thread
From: Jason A. Donenfeld @ 2022-09-23 12:28 UTC (permalink / raw)
To: Geert Uytterhoeven, linux-m68k, linux-kernel; +Cc: Jason A. Donenfeld
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>
---
arch/m68k/kernel/setup_mm.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/arch/m68k/kernel/setup_mm.c b/arch/m68k/kernel/setup_mm.c
index e62fa8f2149b..7e7ef67cff8b 100644
--- a/arch/m68k/kernel/setup_mm.c
+++ b/arch/m68k/kernel/setup_mm.c
@@ -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) {
--
2.37.3
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH v2 2/2] m68k: virt: generate new RNG seed on reboot
2022-09-23 12:28 [PATCH v2 1/2] m68k: process bootinfo records before saving them Jason A. Donenfeld
@ 2022-09-23 12:28 ` Jason A. Donenfeld
2022-09-23 17:03 ` Jason A. Donenfeld
0 siblings, 1 reply; 3+ messages in thread
From: Jason A. Donenfeld @ 2022-09-23 12:28 UTC (permalink / raw)
To: Geert Uytterhoeven, linux-m68k, linux-kernel; +Cc: Jason A. Donenfeld
Rather than rebooting into a system with no entropy, regenerate the RNG
seed before rebooting, so that the new system has a fresh seed.
Fixes: a1ee38ab1a75 ("m68k: virt: Use RNG seed from bootinfo block")
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
arch/m68k/virt/config.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/arch/m68k/virt/config.c b/arch/m68k/virt/config.c
index 4ab22946ff68..d4627840e35b 100644
--- a/arch/m68k/virt/config.c
+++ b/arch/m68k/virt/config.c
@@ -45,10 +45,18 @@ static void virt_halt(void)
;
}
+static const struct bi_record *rng_seed_record;
+
static void virt_reset(void)
{
void __iomem *base = (void __iomem *)virt_bi_data.ctrl.mmio;
+ if (rng_seed_record && rng_seed_record->size > sizeof(*rng_seed_record) + 2) {
+ u16 len = rng_seed_record->size - sizeof(*rng_seed_record) - 2;
+ get_random_bytes((u8 *)rng_seed_record->data + 2, len);
+ *(u16 *)rng_seed_record->data = cpu_to_be16(len);
+ }
+
iowrite32be(CMD_RESET, base + VIRT_CTRL_REG_CMD);
local_irq_disable();
while (1)
@@ -101,6 +109,8 @@ int __init virt_parse_bootinfo(const struct bi_record *record)
* length to prevent kexec from using it.
*/
memzero_explicit((void *)data, len + 2);
+ /* Store a reference to be filled in on reboot. */
+ rng_seed_record = record;
break;
}
default:
--
2.37.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-09-23 17:03 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-23 12:28 [PATCH v2 1/2] m68k: process bootinfo records before saving them Jason A. Donenfeld
2022-09-23 12:28 ` [PATCH v2 2/2] m68k: virt: generate new RNG seed on reboot Jason A. Donenfeld
2022-09-23 17:03 ` Jason A. Donenfeld
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox