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

RX-timeout error path leaks queued read allowances and stale FIFO state into the next same-slave transaction

Summary

The RX-timeout jump leaves 1-2 outstanding RD allowances + partial RX bytes; set_slave_addr early-returns for the same slave so no flush happens - the stale allowances execute on the next transfer and their bytes are delivered as legitimate data (for block reads the corrupted first byte IS the count). IG4_I2C_ABORT is never used anywhere in the driver; the rcount==1 block-read case is unreachable-except-by-timeout. Abort-and-drain-on-error fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

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

Confirmed kernel references

Detail

Evidence (decisive lines)

wire-level source proof vs SMBus 2.0 spec + ig4_reg.h documented abort/flush semantics

Verified recommended fix

see finding markdown

Verdict

untested (hardware-gated: no Intel LPSS I2C model in QEMU; pm SMBus is ichsmb, ACPI-injected fakes fail the COMP_VER gate)