⬢ DragonFlyBSD Kernel Audit
DF-4111 / verdict.json
← back to finding ↓ download raw
{
  "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"
}