DF-1176 / run.log
=== Bug 1: u32 overflow in kmalloc(size_a + size_b) at gfx_v9_0.c:696-697 ===
reg_list_format_size_bytes = 0x80000010 (2147483664)
reg_list_size_bytes = 0x80000010 (2147483664)
u32 sum = 0x00000020 (32) <-- WRAPS
(true 64-bit sum = 0x0000000100000020)
kmalloc(32) returns 0x8004aec00
copy loop runs 536870916 iterations, writing 2147483664 bytes into 32-byte buffer
-> 2147483632-byte heap overflow past kmalloc'd buffer
(in the kernel: structured heap overflow into whatever follows the
register_list_format allocation -- classic slab-corruption primitive)
wrote 0xDEADBEEF into 16 slots past the nominal 32-byte allocation
=== Bug 2: unvalidated reg_list_format_array_offset_bytes at gfx_v9_0.c:703-706 ===
fw->datasize = 4096
reg_list_format_array_offset_bytes = 0x10000 (65536) <-- > datasize
loop reads from (fw + offset) with no check that offset+size <= datasize
BUG: OOB read faulted (signal 11) -- kernel equivalent: page
fault reading fw+65536 past the firmware buffer in
gfx_v9_0_init_microcode -> panic
DF-1176 harness: both bugs demonstrated.
Impact ceiling: heap overflow (slab corruption) + OOB read panic.
EXIT=0