{
  "finding_id": "DF-3812",
  "status": "inconclusive",
  "reproduced": 0,
  "impact": "none",
  "confidence": "certain",
  "verdict": "isp_add_wwn_entry (isp_library.c:2398) and isp_del_wwn_entry (:2529) index FCPARAM(isp, chan) with no chan < isp_nchan check, unlike all four siblings in the same file (:2304/:2327/:2350/:512); isp_del_all_wwn_entries uses > instead of >= (:2580). On MULTI-ID firmware chan is the raw 8-bit in_vpidx from the firmware-generated IN24XX_ELS_RCVD notify (isp_freebsd.c:2627 via ispmbox.h:861-862), so a vpidx beyond the 1-2 channel fcparam allocation (isp_pci.c:824-832) yields a kernel-heap OOB pointer through which the function reads isp_tgt_map[nphdl] and writes a portdb entry (target_mode=1, handle=nphdl, portid=s_id, 8-byte remote-controlled port_wwn) plus fcp->isp_tgt_map[nphdl]=i+1 - multi-field OOB write at ~68KB granularity up to ~17.8MB past the block (arithmetic demonstrated on the guest, see build.log). Not triggered in vivo: the audit guest has no QLogic HBA (pciconf grep count 0), so the driver path is unreachable there; verdict inconclusive = source-certain, hardware-absent. Trust model matches accepted DF-2471/DF-3582/DF-3583 (card-controlled fields); rated Medium because this path writes remote-controlled data OOB.",
  "exploit_chain": "compromised/buggy HBA firmware (or PCIe DMA) emits IN24XX_ELS_RCVD PLOGI/PRLI notify with in_vpidx > nchan -> chan unchecked into FCPARAM -> OOB heap write of remote WWN/portid + tgt_map entry -> arbitrary heap corruption groomable toward uid0; chain not executed (no hardware)",
  "evidence": "findings/poc/DF-3812/VERDICT.md (full trace with path:line), findings/poc/DF-3812/build.log (guest-built offset demonstrator: vpidx 52 -> 3.55MB, 255 -> 17.77MB past block), findings/poc/DF-3812/vpidx_oob_arith.c, findings/poc/DF-3812/env.txt",
  "kernel_refs": [
    "sys/dev/disk/isp/isp_library.c:2398",
    "sys/dev/disk/isp/isp_library.c:2497",
    "sys/dev/disk/isp/isp_library.c:2529",
    "sys/dev/disk/isp/isp_library.c:2580",
    "sys/dev/disk/isp/isp_freebsd.c:2627",
    "sys/dev/disk/isp/isp_freebsd.c:2677",
    "sys/dev/disk/isp/ispmbox.h:861",
    "sys/dev/disk/isp/ispvar.h:644",
    "sys/dev/disk/isp/isp_pci.c:824"
  ],
  "poc_changes": "n/a - pack authored fresh; demonstrator written to quantify OOB offsets since in-vivo trigger impossible",
  "attempts": 1,
  "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:54 UTC 2026 x86_64",
  "runtime_sec": 4,
  "guest_dirty": 0,
  "build_cmd": "cc -Wall -o /tmp/vpidx /tmp/vpidx.c && /tmp/vpidx (guest, unprivileged)",
  "run_cmd": "/tmp/vpidx",
  "code_hash": "sha256:3e3613547079b3036e7e93e097a4b4f3221f573c37675f24ffb3d113148b8691",
  "notes": "Pass-2 cross-file lead (a) resolved: isp_find_handle contract is sound (seq-checked handles, destroy clears slots). Leads (b)(c)(d) negative: library-side atio/atio2/atio7 and 24xx-response copies are fixed-size struct walks; no isp_get_stats here; ridacq union guarded. Attempt 1 = guest arithmetic demonstrator (built+ran clean); in-vivo attempt impossible (no QLogic HBA).",
  "recommended_fix": "Add chan >= isp_nchan guards to isp_add_wwn_entry/isp_del_wwn_entry and fix isp_del_all_wwn_entries > to >= (isp_library.c)",
  "fix_status": "not_testable",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "not_testable: baseline never reproduced (no QLogic hardware on guest)",
  "fix_evidence": ""
}