DF-2945 / verdict.json
{ "finding_id": "DF-2945", "status": "not_reproduced", "reproduced": 0, "impact": "panic", "confidence": "likely", "verdict": "Both defects confirmed statically with exact line anchors; live trigger not honestly constructible. acctwatch (kern_acct.c:332-359) casts VFS_STATFS to void and tests stack-local sb.f_bavail/f_blocks with no return check (:340-341, :354-355) - any statfs failure (NFS accounting file, unreachable server) drives suspend/resume from uninitialized stack. The v_mount NULL window is real: vgone_vxlocked detaches the vnode from the mount (vfs_subr.c:1585-1587, insmntque(vp, NULL)) BEFORE setting v_type=VBAD (:1603), and acctwatch (holding acct_lock, not the VX lock) can pass the VBAD test and deref vp->v_mount == NULL in vfs_statfs (vfs_vfsops.c:181 derefs mp->mnt_op). Trigger needs root-enabled accounting on a force-unmountable/NFS mount racing the 15s callout - a microsecond window on a 15s cadence; not reproduced. Fix (statfs return check + explicit v_mount test) compiled.", "exploit_chain": "", "evidence": "static: kern_acct.c:340/:354 ignored returns; vfs_subr.c:1585-1603 ordering", "kernel_refs": [ "sys/kern/kern_acct.c:340", "sys/kern/kern_acct.c:354", "sys/kern/vfs_subr.c:1585", "sys/kern/vfs_vfsops.c:181" ], "poc_changes": "verification not attempted (setup disproportionate to Low); line-accurate confirmation only", "attempts": 0, "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:04 UTC 2026 root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC x86_64", "runtime_sec": 0, "guest_dirty": 0, "build_cmd": "(none)", "run_cmd": "(none)", "code_hash": "", "notes": "scenario exactly matches the code comments own warning", "recommended_fix": "check VFS_STATFS return + test v_mount explicitly (or set VBAD before clearing v_mount)", "fix_status": "not_testable", "fix_verdict": "compile-validated in fix-all kernel" } |