DragonFlyBSD Kernel Audit
DF-0220 / env.txt
← back to finding ↓ download raw
================================================================================
DF-0220 verification environment (re-verified 2026-07-03)
================================================================================
Guest: DragonFlyBSD master DEV (KVM, single-tenant, vm.sh-managed)
Snapshot reverted between boots via: dfbsd-qemu/vm.sh reset with-src

uname -a:
  DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul  2
  06:02:54 UTC 2026
  root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC  x86_64

kern.version (first line):
  DragonFly 6.5-DEVELOPMENT #0: Thu Jul  2 06:02:54 UTC 2026

cc --version:
  cc 8.3 [DragonFly] Release/2019-02-22

QEMU/KVM config (vm.sh):
  qemu-system-x86_64 -enable-kvm -m 4096 -smp 6
  -drive disk.qcow2 (virtio-blk)
  -netdev user,hostfwd 127.0.0.1:5522-:22 (virtio-net)
  (no virtio-rng device, no RDRAND on the host CPU exposed to the guest)

dmesg | grep -iE 'random|entropy|csprng|rand|seed|rdrand':
  rdrand0: No RdRand support.        <- no HW RNG entropy source on this guest

sysctl (post-boot):
  kern.rand_mode: mixed              <- default (rand_mode==2: csprng XOR IBAA)
  kern.boottime = ... (varies per boot)

Random-source constants (sys/sys/random.h, sys/kern/subr_csprng.c):
  RAND_SRC_TIMING   = 0x0002         (sys/sys/random.h:79)
  RAND_SRC_THREAD2  = 0x000c         (sys/sys/random.h:89)
  RAND_SRC_MASK     = 0x00FF         (sys/sys/random.h:93)
  SIZE              = 256            (kern_nrandom.c timing loop = 128 feeds)
  MIN_POOL_SIZE     = 96             (sys/kern/subr_csprng.c:54)
  MIN_RESEED_INTERVAL = hz/10        (sys/kern/subr_csprng.c:57)

Kernel data fact (decisive for non-reproduction):
  sizeof(struct globaldata) = 14976   (DWARF DW_AT_byte_size + gdb on
                                       /boot/kernel/kernel.debug; struct defined
                                       at sys/sys/globaldata.h:129-215)
  => the RAND_SRC_THREAD2 feed in rand_initialize (kern_nrandom.c:539-543)
     injects 14976 bytes into csprng pool[0], far exceeding MIN_POOL_SIZE=96,
     so the first read_random at kern_nrandom.c:558 triggers a successful
     csprng_reseed and keys the cipher BEFORE init(8) (SI_SUB_KTHREAD_INIT)
     runs.

SYSINIT ordering (sys/sys/kernel.h):
  SI_BOOT2_POST_SMP = 0x1cc0000      <- rand_initialize  (kern_nrandom.c:562)
  SI_SUB_KTHREAD_INIT = 0xe000000    <- init(8) launch   (kernel.h:216)
  (rand_initialize runs ~0xc340000 subsystem-ticks before userspace starts)

PoC user: maxx (uid 1001, not in wheel). Root shell forced via vm.sh run_root.
Console: comconsole baked into clean-install baseline; no panics here, but any
would land in dfbsd-qemu/boot.log.