From: "Jason A. Donenfeld" <Jason@zx2c4.com>
To: Geert Uytterhoeven <geert@linux-m68k.org>,
linux-m68k@lists.linux-m68k.org, linux-kernel@vger.kernel.org
Cc: "Jason A. Donenfeld" <Jason@zx2c4.com>
Subject: [PATCH v4 3/3] m68k: generate new RNG seed on reboot
Date: Mon, 26 Sep 2022 13:37:54 +0200 [thread overview]
Message-ID: <20220926113754.1256358-3-Jason@zx2c4.com> (raw)
In-Reply-To: <20220926113754.1256358-1-Jason@zx2c4.com>
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/include/asm/bootinfo.h | 2 ++
arch/m68k/kernel/process.c | 11 +++++++++++
arch/m68k/kernel/setup_mm.c | 2 ++
3 files changed, 15 insertions(+)
diff --git a/arch/m68k/include/asm/bootinfo.h b/arch/m68k/include/asm/bootinfo.h
index 81c91af8ec6c..71103530839a 100644
--- a/arch/m68k/include/asm/bootinfo.h
+++ b/arch/m68k/include/asm/bootinfo.h
@@ -28,6 +28,8 @@ void process_uboot_commandline(char *commandp, int size);
static inline void process_uboot_commandline(char *commandp, int size) {}
#endif
+extern const struct bi_record *rng_seed_record;
+
#endif /* __ASSEMBLY__ */
diff --git a/arch/m68k/kernel/process.c b/arch/m68k/kernel/process.c
index 2cb4a61bcfac..c2b20d5d51e2 100644
--- a/arch/m68k/kernel/process.c
+++ b/arch/m68k/kernel/process.c
@@ -29,6 +29,7 @@
#include <linux/reboot.h>
#include <linux/init_task.h>
#include <linux/mqueue.h>
+#include <linux/random.h>
#include <linux/rcupdate.h>
#include <linux/syscalls.h>
#include <linux/uaccess.h>
@@ -36,6 +37,7 @@
#include <asm/traps.h>
#include <asm/machdep.h>
#include <asm/setup.h>
+#include <asm/bootinfo.h>
asmlinkage void ret_from_fork(void);
@@ -51,8 +53,17 @@ void arch_cpu_idle(void)
#endif
}
+const struct bi_record *rng_seed_record;
+
void machine_restart(char * __unused)
{
+ if (rng_seed_record && rng_seed_record->size > sizeof(*rng_seed_record) + 2) {
+ u16 len = rounddown_pow_of_two(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);
+ }
+
if (mach_reset)
mach_reset();
for (;;);
diff --git a/arch/m68k/kernel/setup_mm.c b/arch/m68k/kernel/setup_mm.c
index e45cc9923703..eacf734bea0e 100644
--- a/arch/m68k/kernel/setup_mm.c
+++ b/arch/m68k/kernel/setup_mm.c
@@ -160,6 +160,8 @@ static void __init m68k_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;
}
--
2.37.3
next prev parent reply other threads:[~2022-09-26 13:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-26 11:37 [PATCH v4 1/3] m68k: process bootinfo records before saving them Jason A. Donenfeld
2022-09-26 11:37 ` [PATCH v4 2/3] m68k: rework BI_VIRT_RNG_SEED as BI_RNG_SEED Jason A. Donenfeld
2022-09-26 11:37 ` Jason A. Donenfeld [this message]
2022-09-26 13:13 ` [PATCH v4 3/3] m68k: generate new RNG seed on reboot Jason A. Donenfeld
2022-09-27 13:09 ` Jason A. Donenfeld
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220926113754.1256358-3-Jason@zx2c4.com \
--to=jason@zx2c4.com \
--cc=geert@linux-m68k.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.