⬢ DragonFlyBSD Kernel Audit
DF-2822 / fix.diff
← back to finding ↓ download raw
--- a/sys/kern/kern_nrandom.c	2026-06-29 12:51:19.000000000 +0000
+++ b/sys/kern/kern_nrandom.c	2026-10-26 00:25:42.777043079 +0000
@@ -656,7 +656,10 @@
 	while (csprng_pcpu && bytes) {
 		n = bytes;
 		if (srcid & RAND_SRCF_PCPU) {
-			state = &csprng_pcpu[mycpu->gd_cpuid];
+			if (csprng_pcpu == &csprng_boot)
+				state = &csprng_boot;
+			else
+				state = &csprng_pcpu[mycpu->gd_cpuid];
 		} else {
 			state = iterate_csprng_state(bytes);
 			if (n > 256)
@@ -694,7 +697,10 @@
 		kprintf("read_random: csprng not yet ready\n");
 		return 0;
 	}
-	state = &csprng_pcpu[mycpu->gd_cpuid];
+	if (csprng_pcpu == &csprng_boot)
+		state = &csprng_boot;	/* array not installed yet */
+	else
+		state = &csprng_pcpu[mycpu->gd_cpuid];
 
 	spin_lock(&state->spin);
 	if (rand_mode == 0) {