DF-4010 / verdict.json
{ "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": "" } |