⬢ DragonFlyBSD Kernel Audit
DF-4010 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-4010",
  "status": "untested",
  "reproduced": 0,
  "impact": "none",
  "confidence": "certain",
  "verdict": "Source-certain resource leak, HW-gated live: on pass-thru timeout with reinit-realloc, mpr_wait_command sets *cmp=NULL (mpr.c:3611-3617) and mpr_user_pass_thrus error branch skips kfree(cm->cm_data) (mpr_user.c:1052-1056 vs 1149-1151) while mpr_free_command never frees cm_data (mprvar.h:568 NULLs it) \u2014 the user-sized M_MPRUSER buffer and its loaded dmamap mapping leak per timed-out pass-thru. Low severity (slow kmem/dmamap exhaustion from the operator-group surface, 30s+IOC-reset per iteration). Not live-reproduced: no mpr controller on the guest.",
  "exploit_chain": "",
  "evidence": "path trace in README.md: mpr_user.c:1050-1056 (error branch skips free), mpr_user.c:1149-1151 (free gated on cm!=NULL), mprvar.h:568-611 (mpr_free_command NULLs cm_data without kfree), mpr.c:3604-3618 (*cmp=NULL protocol), contrast mpr_user.c:734-735 (mpr_user_command frees buf unconditionally \u2014 no leak there)",
  "kernel_refs": [
    "sys/dev/raid/mpr/mpr_user.c:1050",
    "sys/dev/raid/mpr/mpr_user.c:1052",
    "sys/dev/raid/mpr/mpr_user.c:1149",
    "sys/dev/raid/mpr/mpr_user.c:904",
    "sys/dev/raid/mpr/mprvar.h:568",
    "sys/dev/raid/mpr/mpr.c:3604"
  ],
  "poc_changes": "n/a",
  "attempts": 0,
  "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": 0,
  "guest_dirty": 0,
  "build_cmd": "",
  "run_cmd": "",
  "code_hash": "",
  "notes": "Low severity: no corruption shape; resource exhaustion only. Skipped live verification per audit contract (Low); would need real controller + forced command timeouts.",
  "recommended_fix": "Free (or reclaim and unload) the orphaned cm_data on the cm==NULL error path \u2014 e.g. have mpr_realloc hand back orphaned cm_data pointers, or keep a local reference in mpr_user_pass_thru and kfree/bus_dmamap_unload it on all error paths.",
  "fix_status": "untested",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "not attempted (Low; HW-gated)",
  "fix_evidence": ""
}