⬢ DragonFlyBSD Kernel Audit
DF-3758 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-3758",
  "status": "not_reproduced",
  "reproduced": 0,
  "impact": "none",
  "confidence": "likely",
  "verdict": "tulip_rx_intr()s replenish loop panics unconditionally when bus_dmamap_load_mbuf(BUS_DMA_NOWAIT) fails (if_de.c:3139, marked /* XXX */ by the author). The RX data tag is capped at BUS_SPACE_MAXADDR_32BIT (if_de.c:3945-3947), so on hosts with memory above 4 GB high clusters need bounce pages and the NOWAIT load can fail under DMA-map/memory pressure while a local user drives receive traffic -> kernel panic (local DoS). The correct degrade pattern exists 12 lines earlier for m_getcl failure (if_de.c:3114-3122: fillok=0, TULIP_RXBUFSLOW, retry via watchdog if_de.c:3806); the map-load failure should do the same. Guest evidence (run.log): panic string live in /boot/kernel/kernel, source confirmed in /usr/src, driver compiled into X86_64_GENERIC but zero attached instances (hw.de.* count=0, no 0x1011 PCI devices) -> path cannot execute on this rig, hence not_reproduced; expected impact on de-equipped hosts is a reliable-if-probabilistic unprivileged local panic.",
  "exploit_chain": "",
  "evidence": "run.log: strings /boot/kernel/kernel shows 3 tulip_rx_intr hits; if_de.c:3127-3145 excerpt with panic(\"tulip_rx_intr\") at 3139; kldstat pci/if_de: 1 and hw.de.* sysctl OIDs: 0.",
  "kernel_refs": [
    "sys/dev/netif/de/if_de.c:3134-3140",
    "sys/dev/netif/de/if_de.c:3106-3122",
    "sys/dev/netif/de/if_de.c:3945-3947"
  ],
  "poc_changes": "No seed PoC; authored the shell evidence collector from scratch.",
  "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,
  "build_cmd": "sh panic_path_evidence.sh (no compile step)",
  "run_cmd": "sh panic_path_evidence.sh",
  "code_hash": "3e4ea11101a0150fe2151838e75ae14500b64ef0ce67ec98ae2215d4c1bc6143",
  "notes": "Requires de(4) hardware for actual panic reproduction; Medium per local-DoS rubric on de-equipped machines, hardware-gated on this guest.",
  "recommended_fix": "Replace panic() at if_de.c:3139 with m_freem(ms); fillok=0; TULIP_RXBUFSLOW; break \u2014 mirroring the m_getcl failure path.",
  "fix_status": "not_testable",
  "fix_baseline_reproduced": 0,
  "fix_patched_reproduced": 0,
  "fix_verdict": "fix.diff authored (drop + back off instead of panic); not kernel-tested: no de(4) hardware on the guest.",
  "fix_evidence": "fix.diff mirrors the existing graceful path at if_de.c:3114-3122."
}