β¬’ DragonFlyBSD Kernel Audit
← triage Β· dashboard
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)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-4950 Β· 1 files
FileTypeDescriptionSize
verdict.json file 952 B view raw

Fix verification

not_testable
per-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.