SMB_BREAD passes uninitialized stack byte as the driver's requested count; user's clamped rcount never communicated
Summary
bcount is declared uninit and passed as the in/out count to smbus_bread - the hardware transfer length is leaked stack garbage (ichsmb gates on it AND writes it to ICH_D0) while the user's rcount influences only the copyout. Nondeterministic lengths + a stack-content oracle. Seed-bcount fix.
Discussion (0)
PoC verification
Evidence pack
findings/poc/DF-4991 Β· 1 files| File | Type | Description | Size | |
|---|---|---|---|---|
| verdict.json | file | 991 B | view raw |
Fix verification
not_testableConfirmed kernel references
Detail
Exploit chain
uninit bcount -> ichsmb EINVAL-or-transfer branch on stack garbage; length observable
Evidence (decisive lines)
findings/poc/DF-4991/ (this verdict)
Verdict
Uninit-input, root-gated (Low): SMB_BREAD declares u_char bcount UNINITIALIZED and passes &bcount as the smbus_bread count (an in/out param) - the hardware transfer length is a leaked stack byte (ichsmb gates the whole op on it and writes it to ICH_D0; ig4 reads it as rcount) while the user's clamped rcount influences only the copyout bound, never the transaction. Nondeterministic lengths + a mini oracle on prior stack contents. No OOB on in-tree backends. Seed-bcount-from-rcount fix.
No comments yet.