DF-1172 / fix_validation.txt
DF-1172 (nataraid ata-raid.c LSI v2 parser) — fix validation (combined nativekernel build)
=========================================================================================
Baseline (#0 unpatched): ata_raid_lsiv2_read_meta indexes raidp[array+meta->raid_number]
(ata-raid.c:2802-2803, BSS OOB of heap ptr for raid_number>=16),
meta->configs[raid_number] (:2819/2822, OOB read for raid_number>=30), and
raid->disks[meta->disk_number] (:2866-2869, heap OOB for disk_number>=16).
=> 3-site OOB (BSS write + configs OOB read + heap overflow). CONFIRMED by
overflow_harness (1600 B BSS spill worst-case, configs[200] OOB read,
11520 B heap spill for disk_number=200). nataraid IS in X86_64_GENERIC:83
and the guest's Intel PIIX4 IDE controller passes the read_metadata gate.
Fix (#1 single-fix kernel, both wpi+nata fixes applied together):
cd /usr/src && patch -p1 --forward < /root/df1172.diff -> Hunk #1 @2795 OK
make -j6 nativekernel KERNCONF=X86_64_GENERIC -> NK_DONE rc=0
ata-raid.o compiled clean under -Werror.
cp kernel.stripped /boot/kernel/kernel ; boot
kern.version = DragonFly 6.5-DEVELOPMENT #1: Fri Jul 17 06:10:36 UTC 2026
Rejection-guard string present in booted kernel:
strings /boot/kernel/kernel | grep -c "raid_number %u / disk_number %u out of range" -> 1
Before/after marker (harness, same math as the live parser):
BEFORE (#0): 3-site OOB confirmed (BSS 16 stores / configs[200] / disks 240 entries).
AFTER (#1): metadata with raid_number>=16 or disk_number>=16 is REJECTED before
the loop runs -> 0 BSS-OOB stores, 0 configs OOB, 0 disks OOB
(overflow_harness WITH-FIX section).
fix_status: not_testable (runtime) — the live in-kernel trigger requires an ATA
disk carrying crafted LSI v2 metadata; the QEMU/loader artifact documented in
DF-1171 (the DragonFly loader hangs on ANY extra hard disk before the kernel
boots) blocks adding such a disk on this guest. Validated at apply + compile +
boot + harness level: the range-rejection guard is compiled into the booted
#1 kernel and provably prevents all 3 OOB indexings.