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

dp_retrain_link_dp_test walks dc->current_state with no lock and no state reference while concurrent atomic commits release it β€” use-after-free driven by unauthenticated HPD-RX automated-test input from a malicious DP sink

Summary

The retrain path (reachable from an unauthenticated HPD-RX AUTOMATED_TEST/LINK_TRAINING from a malicious ~$20 DP sink, under only the I2C hpd_lock) walks current_state->pipe_ctx[] unlocked and unreferenced while dc_commit_state releases the same object - with tens of ms of udelay/msleep/training-retry window the race is wide. UAF indirect calls through freed stream_enc->funcs and hwss.disable_stream. Upstream later added the DM dc_lock; this 4.15-era vintage has none. Hardware-gated (no AMD GPU on guest). Retain/release + DM dc_lock fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

not_testable
baseline no→ patch + rebuild →patched clean
per-fix-DF-5021

Confirmed kernel references

Detail

Evidence (decisive lines)

source-level analysis in finding markdown

Verified recommended fix

see finding markdown

Verdict

untested (hardware-gated: no AMD GPU on audit guest)