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

radeon_ring_backup() uses the hardware rptr as the first ring index without ptr_mask β€” bogus GPU/writeback value gives a wild kernel OOB read (panic) during GPU reset

Summary

The loop masks ptr only after the post-increment, so the FIRST ring[ptr] uses the raw u32 - a wedged MMIO readback or hung-GPU writeback (backup runs before the hw reset, on the sick device) reads up to 16GB past the ring BO -> kernel fault during an attacker-induced reset. Identical upstream v4.15/v6.1. Same hw-trust family as DF-4352. mask-before-loop one-liner.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

not_testable
per-fix-DF-4821

Confirmed kernel references

Detail

Exploit chain

saturated GPU deadlock -> lockup reset -> backup reads raw rptr > ptr_mask -> ring[ptr] far OOB read -> kernel page fault

Evidence (decisive lines)

findings/poc/DF-4821/ (this verdict)

Verdict

Hardware-gated one-line hardening: radeon_ring_backup uses the hardware rptr (MMIO register or GTT writeback slot) as the FIRST ring index without ptr_mask - masking happens only after the post-increment - so any bogus u32 (wedged MMIO readback, hung GPU scribbling the writeback; backup runs BEFORE the hw reset on the sick device) reads up to 16GB past the kmap'd ring BO -> kernel fault/panic during attacker-induced GPU reset. size itself is masked so the alloc is bounded. Identical upstream (v4.15 and still v6.1). Same hardware-trust family as DF-4352. No radeon GPU on guest; mask-before-loop fix.