DF-3630 / verdict.json
{ "finding_id": "DF-3630", "status": "inconclusive", "reproduced": 0, "poc_path": "findings/poc/DF-3630", "artifact_dir": "findings/poc/DF-3630", "build_cmd": "n/a (no iwm hardware on guest)", "run_cmd": "n/a (no iwm hardware on guest)", "code_hash": "80fa7d4297f3b8bead12140282e00f0a5c2e0b5e6f3dd8d3ef6a4678721bc868", "build_log": null, "run_log": null, "impact": "none", "confidence": "certain", "verdict": "iwm_handle_rxb() copies sizeof(sc->sc_cmd_resp)==PAGE_SIZE (4096) bytes from a command response packet (if_iwm.c:5511-5514) regardless of the packets actual length or its offset in the 4096-byte RX cluster; HAVEROOM() allows offset up to 4087 (:5377-5380,5405), so a response preceded by any other notification overreads up to ~4087 bytes past the mbuf cluster. The copy is the source of every synchronous command response (hcmd->resp_pkt, if_iwm_util.c:327). Sibling: iwm_alive_fn() v3 fallback (:2784-2789) reads a fixed struct from the raw packet with no payload-length check. Distinct from DF-1145 (MPDU byte_count/mpdu_len, phy-cmd, statistics sinks). Not exercisable on the guest (no iwm device; env.txt).", "exploit_chain": "", "evidence": "VERDICT.md; README.md (copy-span arithmetic); env.txt; fix.diff (length-clamped copy + alive_fn minimum-length check, applies clean)", "kernel_refs": [ "sys/dev/netif/iwm/if_iwm.c:5509", "sys/dev/netif/iwm/if_iwm.c:5512", "sys/dev/netif/iwm/if_iwm.c:5572", "sys/dev/netif/iwm/if_iwm.c:2784", "sys/dev/netif/iwm/if_iwm.c:5377", "sys/dev/netif/iwm/if_iwm_util.c:327", "sys/dev/netif/iwm/if_iwmvar.h:312", "sys/dev/netif/iwm/if_iwmvar.h:500" ], "poc_changes": "n/a - source-level verification", "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": 60, "guest_dirty": 0, "notes": "iwm module loads on guest (kldload if_iwm) but attaches to no device: pciconf shows no Intel Wireless NIC, no wlan interface appears. Verification is source-level (plus the DF-3631 logic-level harness).", "recommended_fix": "fix.diff clamps the copy to the computed packet length (len, if_iwm.c:5403-5404) and adds an alive_fn payload check", "fix_status": "not_testable", "fix_baseline_reproduced": false, "fix_patched_reproduced": false, "fix_verdict": "fix.diff clamps the copy to the computed packet length (len, if_iwm.c:5403-5404) and adds an alive_fn payload check; applies cleanly; no device to validate in-kernel", "fix_evidence": "fix.diff verified with patch --dry-run against sys/dev/netif/iwm/if_iwm.c; no kernel-level validation possible (no iwm device)" } |