β¬’ DragonFlyBSD Kernel Audit
← triage Β· dashboard
DF-3884

drm_dp_mst_topology_mgr_destroy/suspend never flush tx_work: pending work can run after teardown (DF-3699 family)

Summary

destroy() flushes mgr->work and destroy_connector_work but not tx_work, which kick_tx queues on system_long_wq from every HPD IRQ; suspend() likewise flushes only work/destroy_connector_work. A tx_work queued by a late HPD before teardown runs process_single_down_tx_qlock on a destroyed mgr (kfree'd payloads/proposed_vcpis + driver-private mgr memory) -> UAF. Distinct from DF-3699 (queue_work double-enqueue): a plain missing flush_work, but the file's works are also exposed to the DF-3699 pattern whenever two HPD contexts queue concurrently. Driver unload / unplug with in-flight HPD storm. Add flush_work(tx_work) fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Confirmed kernel references

β€”

Detail

Evidence (decisive lines)

β€”

Verdict

Low - PoC skipped per contract (hardware-gated; race timing). Source trace in finding text; fix authored.