DF-3822 / verdict.json
{ "finding_id": "DF-3822", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "likely", "verdict": "aac_detach() removes and frees entries of sc->aac_container_tqh with no aac_container_lock (aac.c:679-685) while (a) aac_handle_aif() - still reachable from aac_new_intr, because bus_teardown_intr only happens later in aac_free (aac.c:625) and interrupts are masked later in aac_shutdown (aac.c:767) - walks the same list unlocked (aac.c:3269-3278) and (b) aac_query_disk() walks it under the lock (aac.c:3664-3687). The interleaving yields TAILQ_NEXT/FREE-dereference of kfreed struct aac_container (UAF). Root-detach + device-AIF/operator-ioctl preconditions; cannot be staged on the audit guest (no AAC HBA, no /dev/aacd0, zero matching PCI vendors). Locking asymmetry itself is source-certain.", "exploit_chain": "root detach || adapter AIF re-enumeration -> unlocked TAILQ_REMOVE/kfree races aac_handle_aifs or aac_query_disks walk -> use-after-free read through co->co_link/co_mntobj/co_disk -> panic or info disclosure of freed heap", "evidence": "VERDICT.md lock-state matrix; fix.diff (lock the detach removal); ../DF-3819/env.txt (guest hardware absence)", "kernel_refs": [ "sys/dev/raid/aac/aac.c:679", "sys/dev/raid/aac/aac.c:683", "sys/dev/raid/aac/aac.c:625", "sys/dev/raid/aac/aac.c:3269", "sys/dev/raid/aac/aac.c:3316", "sys/dev/raid/aac/aac.c:3665" ], "poc_changes": "No seed; analysis pack - the race needs an attached controller.", "attempts": 1, "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:54 UTC 2026 X86_64_GENERIC x86_64", "runtime_sec": 0, "guest_dirty": 0, "build_cmd": null, "run_cmd": null, "code_hash": null, "notes": "Detach-vs-in-flight-fib family (orchestrator hint e). Severity Low: root-initiated detach + device event timing; defect is the missing lock on shared-list teardown.", "recommended_fix": "Hold aac_container_lock around the container TAILQ_REMOVE/kfree in aac_detach (aac.c:683).", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "Race requires attached AAC hardware; absent on the guest. fix.diff adds the missing lock, mirroring aac_handle_aifs removal discipline.", "fix_evidence": "fix.diff" } |