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

gfx sw_init partial-failure strands KIQ/MQD kernel BOs and mqd_backup allocations β€” teardown unreachable behind the IP-block status.sw gate

Summary

Allocation side has no unwind and the free side is gated behind a fully-successful sw_init - every bare return r in gfx_v8/v9 sw_init after kiq_init permanently pins ~9 BOs (VRAM/GTT) + 9 mqd_backup kmallocs until reboot, accumulating per probe retry. Info hygiene, hw-gated. Unwind-in-callers fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-4938 Β· 1 files
FileTypeDescriptionSize
verdict.json file 1.1 KB view raw

Fix verification

not_testable
per-fix-DF-4938

Confirmed kernel references

Detail

Exploit chain

mid-probe failure (GTT/VRAM pressure) after kiq_init -> stranded BOs/kmallocs -> accumulate per retry

Evidence (decisive lines)

findings/poc/DF-4938/ (this verdict; static call-graph proof)

Verdict

Resource-exhaustion hygiene (Info, hw-gated): the gfx sw_init allocates persistent KIQ/MQD kernel BOs (KIQ EOP, KIQ MQD in VRAM, up to 8 compute MQDs in GTT) plus mqd_backup kmallocs with NO internal unwind, and the only teardown (sw_fini) is gated behind a fully-successful sw_init by the driver core - every bare return r in gfx_v8/v9 sw_init after kiq_init succeeds permanently pins ~9 BOs + 9 kmallocs until reboot, accumulating across probe retries. No unpriv trigger, no corruption. Unwind-in-callers fix (representative gfx_v9 diff).