DF-4111 / verdict.json
{ "finding_id": "DF-4111", "status": "untested", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "Source-certain, hardware-gated. tl_start ignores tl_encaps failure return (sys/dev/netif/tl/if_tl.c:1856). The only failure path (cluster OOM for the >10-fragment collapse, if_tl.c:1773-1777) frees nothing and arms nothing, yet tl_start chains the descriptor and BPF_MTAPs it with cur_tx->tl_mbuf == NULL (if_tl.c:1865; entries NULLed on recycle at :1493, assignment at :1806 unreached). Three consequences: (1) m_head mbuf chain leaked per failure - self-amplifying toward mbuf exhaustion under the very memory pressure that causes the failure; (2) with a BPF listener attached, bpf_mtap(bp, NULL) (sys/net/bpf.c:1299) passes its bp/bif_dlist guards and NULL-derefs the mbuf - kernel panic; (3) a non-READY (stale cstat) list is chained into TX and may receive TX GO (if_tl.c:1881-1892) - chip-visible garbage state. Impact ceiling: local DoS (OOM-timed; BPF leg privileged). Guest has no ThunderLAN NIC (presence_probe.sh), tl_start never executes there - honestly untested; not a false positive.", "exploit_chain": "", "evidence": "findings/poc/DF-4111/VERDICT.md (trace if_tl.c:1856/1773-1777/1806/1809/1865/1493/1881-1892, bpf.c:1299); presence_probe.sh + env.txt; fix.diff (free packet + recycle chain entry on encap failure)", "kernel_refs": [ "sys/dev/netif/tl/if_tl.c:1856", "sys/dev/netif/tl/if_tl.c:1773", "sys/dev/netif/tl/if_tl.c:1806", "sys/dev/netif/tl/if_tl.c:1865", "sys/dev/netif/tl/if_tl.c:1493", "sys/net/bpf.c:1299", "sys/net/bpf.h:265" ], "poc_changes": "No seed PoC. Hardware-gated (no ThunderLAN NIC on guest); presence probe only.", "attempts": 0, "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": 0, "guest_dirty": 0, "build_cmd": "(none - hardware-gated; presence_probe.sh only)", "run_cmd": "vm.sh run_root ifconfig -l # -> vtnet0 lo0 (no tl device)", "code_hash": "SKIP-HW-GATED-4111", "notes": "DoS-class only: OOM-timed mbuf leak / privileged-BPF NULL-deref panic / stale-descriptor TX. No write primitive.", "recommended_fix": "Check tl_encaps return in tl_start: m_freem(m_head), push cur_tx back on tl_tx_free, continue.", "fix_status": "not_tested", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff authored against the read-only sys/ tree (patch --dry-run clean); cannot be validated without ThunderLAN hardware.", "fix_evidence": "findings/poc/DF-4111/fix.diff" } |