⬢ DragonFlyBSD Kernel Audit
DF-3279 / verdict.json
← back to finding ↓ download raw
{
  "finding_id": "DF-3279",
  "status": "reproduced",
  "reproduced": 1,
  "impact": "dos",
  "confidence": "certain",
  "verdict": "Deterministic kernel heap leak: bridge_ioctl_addspan() allocates a bridge_ifinfo (if_bridge.c:1823-1828) that bridge_delete_span() never frees (frees only the bif, if_bridge.c:1155-1156). Measured on the stock guest: devbuf in-use grew 3.12M -> 5.40M (+2.28MB) over 20000 spanport add/del cycles = ~114 bytes/cycle. On the rebuilt kernel with bif_info freed: 266K -> 266K, zero growth.",
  "exploit_chain": "",
  "evidence": [
    "run.log: vmstat -m devbuf before/after on baseline and fixed kernels",
    "fix.diff: kfree(bif->bif_info) in bridge_delete_span",
    "run_fixed.log: zero growth over the identical 20000-cycle loop"
  ],
  "kernel_refs": [
    "sys/net/bridge/if_bridge.c:1823",
    "sys/net/bridge/if_bridge.c:1828",
    "sys/net/bridge/if_bridge.c:1156"
  ],
  "poc_changes": "Written from scratch; needed <net/ethernet.h> for ETHER_ADDR_LEN from if_bridgevar.h.",
  "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": 120,
  "guest_dirty": 0,
  "build_cmd": "cc -O -Wall -o span_leak span_leak.c",
  "run_cmd": "sh run.sh   (root)",
  "code_hash": "122403efa6ccd41a97f6264f984049e159f0fcb25a45d38530403cc56ed6c656",
  "notes": "Root-gated (BRDGADDS/BRDGDELS are BC_F_SUSER); impacts hosts whose automation adds/removes span ports over time. Both the ioctl path and the ifnet-detach path (bridge_ifdetach_dispatch) leak.",
  "recommended_fix": "free bif->bif_info in bridge_delete_span (bundled with the DF-3277 list-head fix)",
  "fix_status": "fixed",
  "fix_kernel_uname": "DragonFly dfbsd 6.5-DEVELOPMENT DragonFly 6.5-DEVELOPMENT #1: Thu Sep 10 00:48:01 UTC 2026  root@dfbsd:/usr/obj/usr/src/sys/X86_64_GENERIC  x86_64",
  "fix_baseline_reproduced": 1,
  "fix_patched_reproduced": 0,
  "fix_verdict": "Fixed kernel: same 20000-cycle loop leaves devbuf in-use unchanged (266K -> 266K) vs +2.28MB on baseline.",
  "fix_evidence": "findings/poc/DF-3279/run_fixed.log"
}