Kexec Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH kexec-tools] i386: pass rng seed via setup_data
@ 2022-07-11 15:41 Jason A. Donenfeld
  2022-07-15  9:26 ` Simon Horman
  0 siblings, 1 reply; 2+ messages in thread
From: Jason A. Donenfeld @ 2022-07-11 15:41 UTC (permalink / raw)
  To: Simon Horman, kexec; +Cc: Jason A. Donenfeld

Linux ≥5.20 expects a RNG seed via setup_data as of the upstream commit
in the link below. That commit adjusts kexec_file_load to pass
SETUP_RNG_SEED. kexec-tools should follow suite, so add more or less the
same code here.

Link: https://git.kernel.org/tip/tip/c/68b8e9713c8
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
 kexec/arch/i386/x86-linux-setup.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c
index ab54a4a..14263b0 100644
--- a/kexec/arch/i386/x86-linux-setup.c
+++ b/kexec/arch/i386/x86-linux-setup.c
@@ -24,6 +24,7 @@
 #include <limits.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/random.h>
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <linux/fb.h>
@@ -544,6 +545,7 @@ struct setup_data {
 #define SETUP_DTB	2
 #define SETUP_PCI	3
 #define SETUP_EFI	4
+#define SETUP_RNG_SEED	9
 	uint32_t len;
 	uint8_t data[0];
 } __attribute__((packed));
@@ -824,6 +826,26 @@ static void setup_e820(struct kexec_info *info, struct x86_linux_param_header *r
 	}
 }
 
+static void setup_rng_seed(struct kexec_info *info,
+			   struct x86_linux_param_header *real_mode)
+{
+	struct {
+		struct setup_data header;
+		uint8_t rng_seed[32];
+	} *sd;
+
+	sd = xmalloc(sizeof(*sd));
+	sd->header.next = 0;
+	sd->header.len = sizeof(sd->rng_seed);
+	sd->header.type = SETUP_RNG_SEED;
+
+	if (getrandom(sd->rng_seed, sizeof(sd->rng_seed), GRND_NONBLOCK) !=
+	    sizeof(sd->rng_seed))
+		return; /* Not initialized, so don't pass a seed. */
+
+	add_setup_data(info, real_mode, &sd->header);
+}
+
 static int
 get_efi_mem_desc_version(struct x86_linux_param_header *real_mode)
 {
@@ -923,6 +945,9 @@ void setup_linux_system_parameters(struct kexec_info *info,
 
 	setup_e820(info, real_mode);
 
+	/* pass RNG seed */
+	setup_rng_seed(info, real_mode);
+
 	/* fill the EDD information */
 	setup_edd_info(real_mode);
 
-- 
2.35.1


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH kexec-tools] i386: pass rng seed via setup_data
  2022-07-11 15:41 [PATCH kexec-tools] i386: pass rng seed via setup_data Jason A. Donenfeld
@ 2022-07-15  9:26 ` Simon Horman
  0 siblings, 0 replies; 2+ messages in thread
From: Simon Horman @ 2022-07-15  9:26 UTC (permalink / raw)
  To: Jason A. Donenfeld; +Cc: kexec

On Mon, Jul 11, 2022 at 05:41:10PM +0200, Jason A. Donenfeld wrote:
> Linux ≥5.20 expects a RNG seed via setup_data as of the upstream commit
> in the link below. That commit adjusts kexec_file_load to pass
> SETUP_RNG_SEED. kexec-tools should follow suite, so add more or less the
> same code here.
> 
> Link: https://git.kernel.org/tip/tip/c/68b8e9713c8
> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>

Thanks, applied.

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-07-15  9:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-11 15:41 [PATCH kexec-tools] i386: pass rng seed via setup_data Jason A. Donenfeld
2022-07-15  9:26 ` Simon Horman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox