DragonFlyBSD Kernel Audit
DF-1136 / run.log
← back to finding ↓ download raw
MAX_VOLTAGE_ENTRIES = 32
sizeof(atom_voltage_table entries[]) = 256
offset of entries[32] (first OOB) = 268
offset of following canary         = 272

VBIOS count=8     entries written in-bounds=8  OOB writes past entries[32]=0 
VBIOS count=32    entries written in-bounds=32  OOB writes past entries[32]=0 
VBIOS count=33    entries written in-bounds=32  OOB writes past entries[32]=1 >>> HEAP OOB WRITE into evergreen_power_info
VBIOS count=48    entries written in-bounds=32  OOB writes past entries[32]=16 >>> HEAP OOB WRITE into evergreen_power_info
VBIOS count=64    entries written in-bounds=32  OOB writes past entries[32]=32 >>> HEAP OOB WRITE into evergreen_power_info
VBIOS count=255   entries written in-bounds=32  OOB writes past entries[32]=223 >>> HEAP OOB WRITE into evergreen_power_info

concrete model (count=48, unchecked writes): entries[32..47] wrote 128 bytes past entries[] into adjacent struct memory
  -> in-kernel these bytes overwrite evergreen_power_info.cac_weights / powertune pointers -> corruption during si_dpm_enable

DF-1136: CONFIRMED heap OOB write past entries[32] (VBIOS count unbounded)

--- WITH FIX (clamp count to MAX_VOLTAGE_ENTRIES=32) ---
VBIOS count=8    -> clamped count=8     OOB writes past entries[32]=0 (in bounds)
VBIOS count=32   -> clamped count=32    OOB writes past entries[32]=0 (in bounds)
VBIOS count=33   -> clamped count=32    OOB writes past entries[32]=0 (in bounds)
VBIOS count=48   -> clamped count=32    OOB writes past entries[32]=0 (in bounds)
VBIOS count=64   -> clamped count=32    OOB writes past entries[32]=0 (in bounds)
VBIOS count=255  -> clamped count=32    OOB writes past entries[32]=0 (in bounds)
FIX result: 0 OOB cases remain (expect 0)
DF-1136 FIX: VALIDATED - clamp prevents all overflows past entries[32]
RUN=0