DF-4172 / verdict.json
{ "finding_id": "DF-4172", "status": "untested", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "Bug certain from line-accurate code trace, but not runtime-testable on this guest: iir_intr indexes sc_gccbs[ctx.istatus-2] (iir.c:1580) with a device-fed doorbell byte that is never range-checked (only bit 0x80 stripped, iir_pci.c:418), so a controller returning 126/127 reads/writes up to 2 gdt_ccb entries (~780 bytes) past the 124-entry kmalloc array - OOB gc_flags dispatch into gdt_free_ccb SLIST corruption (iir.c:661), wild gc_ccb deref in gdt_sync_event (iir.c:1715/1804), or wild gc_ucmd writes in the GDT_GCF_IOCTL completion (iir.c:1600-1632). Guest has no iir controller (gate_check.log: no /dev/iir, no 0x1119/Intel-0600 PCI device), and no syscall path can inject the malformed index - only the device can.", "exploit_chain": "", "evidence": "VERDICT.md (full path:line trace); gate_check.log (hardware absent); fix.diff (range check, git apply --check clean)", "kernel_refs": ["sys/dev/raid/iir/iir.c:1580", "sys/dev/raid/iir/iir.c:250", "sys/dev/raid/iir/iir.c:1583", "sys/dev/raid/iir/iir.c:661", "sys/dev/raid/iir/iir.c:1715", "sys/dev/raid/iir/iir_pci.c:406", "sys/dev/raid/iir/iir_pci.c:418", "sys/dev/raid/iir/iir.h:77"], "poc_changes": "no PoC source written: the trigger is device-fed interrupt state, unreachable from userland; only a hardware gate check was run", "attempts": 1, "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:54 UTC 2026 root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC x86_64", "runtime_sec": 12, "guest_dirty": 0, "build_cmd": "none (no userland trigger)", "run_cmd": "sh gate_check.sh", "code_hash": "6cd1cb94653995c48b8597068012f2693c49edbc21870d9a991f2fa2c80532e8", "notes": "Hardware-gated (malicious/stalled controller). Even on a host with the card this is not software-triggerable. Buckets: memcorrupt. Guest artifacts (gate_check.sh) removed after capture; guest left clean and up.", "recommended_fix": "Range-check ctx.istatus to [2, GDT_MAXCMDS+1] before indexing sc_gccbs in iir_intr (see fix.diff)", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff adds the missing bounds check and passes git apply --check; cannot be runtime-validated without iir hardware", "fix_evidence": "findings/poc/DF-4172/fix.diff (git apply --check clean)" } |