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

amdgpu_i2c_get_byte() leaves *val uninitialized on failed transfers; router-select helpers then compute with and print the garbage byte

Summary

*val assigned only on ret==2; both router helpers declare u8 val uninit then use it - on DF's compat stub the failure branch runs on EVERY call. Live-demonstrated in the DF-4961 run (4x uninit val printed). Minor dmesg disclosure + wrong mux state. *val=0 fix.

Discussion (0)

No comments yet.

PoC verification

Evidence pack

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

Fix verification

not_testable
per-fix-DF-4962

Confirmed kernel references

Detail

Exploit chain

bit i2c (always-fail on DF stub) -> *val untouched -> val &= ~pin | state -> written to router + printed

Evidence (decisive lines)

findings/poc/DF-4962/ (this verdict; live log in the DF-4961 pack)

Verdict

Live-demonstrated during the DF-4961 fix-validation run (findings/poc/DF-4961/run.2.log: the failure branch executed 4x with the uninitialized val printed as the second %02x): amdgpu_i2c_get_byte leaves val untouched unless i2c_transfer()==2, and both router-select helpers declare u8 val uninitialized then compute/print it - on DF's compat stub the failure branch is taken on EVERY call, so a garbage stack byte propagates into router-mux writes and debug logs. Minor info disclosure into dmesg + wrong mux state. val=0-before-transfer fix.