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

All fixed-struct VBIOS table reads discard the table size and dereference full structs after checking only frev/crev β€” OOB read past truncated ATOM data tables

Summary

Every data-table accessor fetches via smu_atom_get_data_table(..., NULL, NULL, NULL) - deliberately discarding the size - then casts the ROM pointer to a full fixed struct (the ~150-byte smc_dpm_info walk, the asic_profiling v4.2 tail, firmwareinfo v3_2) after validating only the revision bytes; amdgpu_atom_parse_data_header performs no bounds validation at all. A crafted VBIOS declaring small structuresize or pointing near the ROM end yields kernel OOB reads (garbage power tables / fault-on-read). Distinct mechanism from DF-1815..1817 (fixed-offset casts, 6 sites). Fetch-and-validate-size fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

not_testable
baseline no→ patch + rebuild →patched clean

not_testable: hardware/boot-flag gated

fix in finding markdown
per-fix-DF-4703

Confirmed kernel references

Detail

Exploit chain

[]

Evidence (decisive lines)

Every data-table accessor discards the size out-param and casts the ROM pointer to a full fixed struct after checking only frev/crev - a table declaring a small structuresize (or pointing near the ROM end) yields OOB reads; the ~150-byte smc_dpm_info walk is the biggest. Same trust model as DF-1815..1817 but a distinct mechanism (fixed-offset casts at 6 sites pass 1 did not file). Fetch-and-validate-the-size fix.

Verdict

not_run: no AMD GPU on guest; mechanism by inspection of smu_helper.c/atom.c (no bounds validation of data_start/size)