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)
PoC verification
Evidence pack
findings/poc/DF-5389 Β· 1 files| File | Type | Description | Size | |
|---|---|---|---|---|
| verdict.json | file | 1.0 KB | view raw |
Fix verification
not_testablebaseline 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)
No comments yet.