DF-4950
ahci_os_stop_port(): unbounded thread-join with no escape converts any port-thread wedge into a permanent unkillable kernel hang at detach/shutdown, and tears down only 1 of the 3 per-port locks
Summary
while(ap_thread) with no timeout - a wedged port thread (DF-3773 class) turns kldunload/detach/reboot into a permanent kernel hang; ap_sim_lock/ap_sig_lock leak per cycle. Bounded-join + uninit-all fix.
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-4950 Β· 1 files| File | Type | Description | Size | |
|---|---|---|---|---|
| verdict.json | file | 952 B | view raw |
Fix verification
not_testableper-fix-DF-4950
Confirmed kernel references
Detail
Exploit chain
wedged port thread -> detach/shutdown -> infinite while(ap_thread) join -> permanent shutdown hang
Evidence (decisive lines)
findings/poc/DF-4950/ (this verdict)
Verdict
Low (wedge precondition = DF-3773 class + root detach/reboot): ahci_os_stop_port waits for the port thread with NO timeout - a wedged thread (port-lock deadlock, dead hw) turns kldunload/detach/shutdown into a permanent unkillable kernel hang; additionally only 1 of the 3 per-port locks (ap_lock) is ever lockuninit'ed (ap_sim_lock/ap_sig_lock leak per attach/detach cycle). Bounded-join-returning-EBUSY + uninit-all-three fix.
No comments yet.