DragonFlyBSD Kernel Audit
DF-1496 / run.log
← back to finding ↓ download raw
DF-1496 atomctrl_get_smc_sclk_range_table stack overflow harness
VBIOS psmu_info->ucSclkEntryNum  = 255 (u8, NO check vs MAX_SCLK_RANGE)
MAX_SCLK_RANGE                   = 8 (ppatomctrl.h:232)
sizeof(entry)                    = 8 bytes
dest stack table                 = 64 bytes (entry[8])
loop would write                 = 2040 bytes (255 entries)
OVERSHOOT past entry[8]          = 1976 bytes of stack smash

Capping replica at ucSclkEntryNum=10 to prove the overflow direction

  entry[7]  = {vco=0x17 postdiv=0x27}  (in-bounds, last legal)
  bytes past entry[8] = 0x10 0x20 0x00 0x10 ... (was zero)
  post_canary = 0x3000200010002010  (expected 0x2222222222222222)

RESULT: stack overflow CONFIRMED at ppatomctrl.c:1375
Loop bound is VBIOS ucSclkEntryNum (u8 0..255), dest is a fixed
entry[8] stack array in callers (polaris10_smumgr.c:803,
vegam_smumgr.c:673). ucSclkEntryNum=255 writes 2040 bytes -> return
address overwrite (code exec) or stack-canary panic.
RUN_EXIT=0