⬢ DragonFlyBSD Kernel Audit
DF-3371 / verdict.json
← back to finding ↓ download raw
{
 "finding_id": "DF-3371",
 "status": "not_reproduced",
 "reproduced": 0,
 "poc_path": "findings/poc/DF-3371",
 "artifact_dir": "findings/poc/DF-3371",
 "build_cmd": "cc -O -o <prog> <prog>.c   (on the guest)",
 "run_cmd": "25 (root)",
 "code_hash": "b6782838893dabb2c6bb93ed32ec0fff6c8047135d92e556067f6f9139c87fc1",
 "build_log": "(inline)",
 "run_log": "VERDICT.md",
 "impact": "none",
 "confidence": "likely",
 "verdict": "IP_ADD_MEMBERSHIP with imr_address=INADDR_ANY does --rt->rt_refcnt then reads rt->rt_ifp (ip_output.c:1655-1659): a manual decrement + use-after-drop - if a concurrent RTM_DELETE freed the entry in between, both the decrement and the read touch freed memory. Stress attempted: ~370k joins raced against route(8) add/delete churn of 239.1/16 (and an in-process RTM socket writer; its RTM_DELETE formatting hit ESRCH, so the external route(8) churn carried the delete side). Window is 2 instructions - not hit; mechanism line-confirmed.",
 "exploit_chain": "",
 "evidence": "VERDICT.md run logs: joins=159670/173573/216187 across three runs, no crash",
 "kernel_refs": [
  "sys/netinet/ip_output.c:1655-1659"
 ],
 "poc_changes": "",
 "attempts": 3,
 "guest_uname": "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",
 "runtime_sec": 60,
 "guest_dirty": 0,
 "runner": "df-bsd-reviewer",
 "notes": "",
 "recommended_fix": "",
 "fix_status": "not_testable",
 "fix_verdict": "Fix: rtfree(rt) AFTER capturing ifp (two-line reorder); needs fault injection to A/B.",
 "fix_baseline_reproduced": null,
 "fix_patched_reproduced": null
}