DF-3279 / verdict.json
{ "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" } |