Index | Thread | Search

From:
Klemens Nanni <kn@openbsd.org>
Subject:
installer, rc: seed no more than bootloader can handle
To:
OpenBSD tech <tech@openbsd.org>
Date:
Sun, 18 May 2025 10:22:12 +0000

Download raw body.

Thread
Installer and rc(8) seed 512 bytes to disk for bootloaders which read only
half of it, so sync shell bits to not "waste" 256 bytes.

Constify bootloaders' storerandom() argument (always BOOTRANDOM) while here.

See
	$ grep -r -e BOOTRANDOM -e loadrandom {lib,{arch/*/,}stand}/
	lib/libsa/stand.h:#define BOOTRANDOM	"/etc/random.seed"
	lib/libsa/stand.h:#define BOOTRANDOM_MAX	256	/* no point being greater than RC4STATE */
	...

Feedback? OK?

Index: etc/rc
===================================================================
RCS file: /cvs/src/etc/rc,v
diff -u -p -r1.581 rc
--- etc/rc	18 May 2025 09:54:48 -0000	1.581
+++ etc/rc	18 May 2025 10:05:25 -0000
@@ -79,7 +79,7 @@ store_random() {
 
 	dd if=$_hostseed of=/dev/random bs=65536 count=1 status=none
 
-	dd if=/dev/random of=$_bootseed bs=512   count=1 status=none
+	dd if=/dev/random of=$_bootseed bs=256   count=1 status=none
 	dd if=/dev/random of=$_hostseed bs=65536 count=1 status=none
 
 	# Removal of the sticky bit indicates the file has fresh contents for
Index: distrib/miniroot/install.sub
===================================================================
RCS file: /cvs/src/distrib/miniroot/install.sub,v
diff -u -p -r1.1271 install.sub
--- distrib/miniroot/install.sub	18 May 2025 09:54:48 -0000	1.1271
+++ distrib/miniroot/install.sub	18 May 2025 10:05:25 -0000
@@ -2936,7 +2936,7 @@ encr_pwd() {
 store_random() {
 	local _bootseed=/mnt/etc/random.seed _hostseed=/mnt/var/db/host.random
 
-	dd if=/dev/random of=$_bootseed bs=512   count=1 status=none
+	dd if=/dev/random of=$_bootseed bs=256   count=1 status=none
 	dd if=/dev/random of=$_hostseed bs=65536 count=1 status=none
 
 	# Removal of the sticky bit indicates the file has fresh contents for
Index: sys/stand/boot/boot.c
===================================================================
RCS file: /cvs/src/sys/stand/boot/boot.c,v
diff -u -p -r1.57 boot.c
--- sys/stand/boot/boot.c	23 Feb 2023 19:48:22 -0000	1.57
+++ sys/stand/boot/boot.c	18 May 2025 10:05:25 -0000
@@ -162,7 +162,7 @@ boot(dev_t bootdev)
 }
 
 int
-loadrandom(char *name, char *buf, size_t buflen)
+loadrandom(const char *name, char *buf, size_t buflen)
 {
 	char path[MAXPATHLEN];
 	struct stat sb;
Index: sys/stand/boot/bootarg.h
===================================================================
RCS file: /cvs/src/sys/stand/boot/bootarg.h,v
diff -u -p -r1.17 bootarg.h
--- sys/stand/boot/bootarg.h	25 May 2020 15:49:42 -0000	1.17
+++ sys/stand/boot/bootarg.h	18 May 2025 10:05:25 -0000
@@ -49,7 +49,7 @@ extern int bootargc;
 extern bootarg_t *bootargp;
 #endif
 
-int	loadrandom(char *name, char *buf, size_t buflen);
+int	loadrandom(const char *name, char *buf, size_t buflen);
 int	mdrandom(char *buf, size_t buflen);
 int	fwrandom(char *buf, size_t buflen);
 
Index: sys/arch/alpha/stand/boot/boot.c
===================================================================
RCS file: /cvs/src/sys/arch/alpha/stand/boot/boot.c,v
diff -u -p -r1.30 boot.c
--- sys/arch/alpha/stand/boot/boot.c	16 Jan 2023 07:29:34 -0000	1.30
+++ sys/arch/alpha/stand/boot/boot.c	18 May 2025 10:05:25 -0000
@@ -67,7 +67,7 @@ char   rnddata[BOOTRANDOM_MAX];
 struct rc4_ctx randomctx;
 
 int
-loadrandom(char *name, char *buf, size_t buflen)
+loadrandom(const char *name, char *buf, size_t buflen)
 {
 	struct stat sb;
 	int fd, i, error = 0;
Index: sys/arch/sparc64/stand/ofwboot/boot.c
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/stand/ofwboot/boot.c,v
diff -u -p -r1.44 boot.c
--- sys/arch/sparc64/stand/ofwboot/boot.c	26 Mar 2024 14:46:48 -0000	1.44
+++ sys/arch/sparc64/stand/ofwboot/boot.c	18 May 2025 10:05:26 -0000
@@ -294,7 +294,7 @@ upgrade(void)
 }
 
 int
-loadrandom(char *path, char *buf, size_t buflen)
+loadrandom(const char *path, char *buf, size_t buflen)
 {
 	struct stat sb;
 	int fd, error = 0;