From: Klemens Nanni Subject: installer, rc: seed no more than bootloader can handle To: OpenBSD tech Date: Sun, 18 May 2025 10:22:12 +0000 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;