โฌข DragonFlyBSD Kernel Audit
DF-1076 / run.log
โ† back to finding โ†“ download raw
sizeof(ichsmb_softc) = 368
offsetof(block_data)  = 73
offsetof(mutex)       = 105 (first byte AFTER block_data[31])
offsetof(canary)      = 169

[CLAMP_FIX disabled โ€” modeling the unpatched audit-source kernel]
slave-supplied count byte (ICH_D0) = 255 (>32 = YES โ€” OOB)
payload byte (ICH_BLOCK_DB)        = 0xaa

post-ISR block_count = 255
post-ISR block_index = 255 (== number of bytes written)

-- hex dump --
block_data[0..7]  : aa aa aa aa aa aa aa aa
block_data[24..31]: aa aa aa aa aa aa aa aa
mutex.payload[0..7]   : aa aa aa aa aa aa aa aa
canary[0..7]      : aa aa aa aa aa aa aa aa
canary[151..159]  : aa aa aa aa aa aa aa aa cc
bytes corrupted inside struct lock mutex = 64 / 64
bytes corrupted in trailing canary       = 159 / 192

payload-bytes (0xAA) found in block_data[32] : 32 / 32
payload-bytes (0xAA) found in mutex.payload[64]: 64 / 64
payload-bytes (0xAA) found in canary[192]      : 159 / 192

VERDICT: OOB WRITE CONFIRMED โ€” 223 payload-bytes landed past block_data[31] (64 in mutex, 159 in canary) โ€” primitive matches the ichsmb.c:583 indexed write driven by the unclamped slave count read at ichsmb.c:575.
On a live kernel, corrupting struct lock mutex causes an immediate panic on the next lockmgr op (ichsmb.c:615).
============================================
sizeof(ichsmb_softc) = 368
offsetof(block_data)  = 73
offsetof(mutex)       = 105 (first byte AFTER block_data[31])
offsetof(canary)      = 169

[CLAMP_FIX enabled โ€” modeling the patched kernel]
slave-supplied count byte (ICH_D0) = 255 (>32 = YES โ€” OOB)
payload byte (ICH_BLOCK_DB)        = 0xaa

post-ISR block_count = 32
post-ISR block_index = 32 (== number of bytes written)

-- hex dump --
block_data[0..7]  : aa aa aa aa aa aa aa aa
block_data[24..31]: aa aa aa aa aa aa aa aa
mutex.payload[0..7]   : dd dd dd dd dd dd dd dd
canary[0..7]      : cc cc cc cc cc cc cc cc
canary[151..159]  : cc cc cc cc cc cc cc cc cc
bytes corrupted inside struct lock mutex = 0 / 64
bytes corrupted in trailing canary       = 0 / 192

payload-bytes (0xAA) found in block_data[32] : 32 / 32
payload-bytes (0xAA) found in mutex.payload[64]: 0 / 64
payload-bytes (0xAA) found in canary[192]      : 0 / 192

VERDICT: NO OVERFLOW โ€” writes stayed inside block_data[32].