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

intel_dsi_vbt: MIPI sequence execution walks the kmemdup'd VBT blob with no end bound β€” heap OOB read via i2c/spi/delay/gpio elements and the operation loop

Summary

exec_sequence iterates elements until a 0x00 byte with no bound against the end of the kmemdup'd blob - vbt.dsi.size is stored precisely for this but never consumed. Every element handler dereferences past the blob on a truncated/desynced VBT: i2c reads *(data+6) and skips up to 262B, spi reads *(data+5), delay reads a u32, gpio reads 2-3 bytes; v1/v2 walks silently re-sync on garbage. Parse-time walkers are partial and v3 sizes are FIXME-unchecked - execution is the last line of defense and has none. Crafted-VBT model (DF-1770..1773/4121..4123 class); crash DoS holding mode_config mutex, no direct disclosure. Thread-the-end-pointer fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

not_testable
baseline no→ patch + rebuild →patched clean

not_testable: hardware-gated (no Intel DSI panel / no mpt HBA on guest)

fix in finding markdown
per-fix-DF-4626

Confirmed kernel references

Detail

Exploit chain

[]

Evidence (decisive lines)

Crafted-VBT walk unbounded until a zero byte: i2c/spi skip sizes (up to 262B) jump arbitrarily far; parse-time walkers partial, v3 sizes explicitly FIXME-unchecked. Distinct from DF-1771 (send_packet len) and DF-4123 (parse overread). Thread-the-end-pointer fix.

Verdict

not_run: no Intel GPU on guest; execution is the last line of defense and has no bound (vbt.dsi.size stored but never consumed)