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

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)

No comments yet.

PoC verification

Evidence pack

findings/poc/DF-4991 Β· 1 files
FileTypeDescriptionSize
verdict.json file 991 B view raw

Fix verification

not_testable
per-fix-DF-4991

Confirmed 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.