⬢ DragonFlyBSD Kernel Audit
DF-3395 / verdict.json
← back to finding ↓ download raw
{
 "finding_id": "DF-3395",
 "status": "reproduced",
 "reproduced": 1,
 "impact": "dos",
 "confidence": "certain",
 "verdict": "Reproduced deterministically on the stock guest: ifconfig vtnet0 name vtnet0r (SIOCSIFNAME) fires ifnet_detach_event (if.c:2206); vlans handler (correctly registered on that event, if_vlan.c:377) unconfigures every vlan on the renamed parent (if_vlan.c:410-429 -> vlan_unconfig), permanently destroying the parent+tag L2 configuration (vlan: 0 parent interface: <none>); renaming back does not restore it. All tagged subnets on the renamed interface blackhole until reconfigured. Privileged trigger, memory-safe teardown -> Low.",
 "exploit_chain": "",
 "evidence": [
  "run.log \u2014 before: vlan: 100 parent interface: vtnet0 / status: active; after rename: vlan: 0 parent interface: <none>; after rename-back: still <none>",
  "VERDICT.md \u2014 event chain if.c:2206 -> if_vlan.c:432 -> if_vlan.c:410-429 -> vlan_unconfig (if_vlan.c:854)"
 ],
 "kernel_refs": [
  "sys/net/if.c:2206",
  "sys/net/vlan/if_vlan.c:377",
  "sys/net/vlan/if_vlan.c:432",
  "sys/net/vlan/if_vlan.c:410",
  "sys/net/vlan/if_vlan.c:854"
 ],
 "poc_changes": "Seed sketch converted to a self-contained shell script (rename_wipes_vlan.sh) with setup/verify/restore phases.",
 "attempts": 2,
 "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": 25,
 "guest_dirty": 1,
 "build_cmd": "sh rename_wipes_vlan.sh",
 "run_cmd": "sh rename_wipes_vlan.sh",
 "code_hash": "e4c0616d36e97820ee7573440cada98ba31223298e0065dec6943019671aab38",
 "notes": "Same event-abuse collateral applies to other ifnet_detach_event subscribers (bridge member removal on rename). Cross-ref DF-3344 (lagg registered on the never-fired ifnet_departure_event \u2014 the inverse mistake).",
 "recommended_fix": "Fire announcement-only ifnet_departure_event in the SIOCSIFNAME path instead of ifnet_detach_event (keep the latter for real destruction in if_detach()).",
 "fix_status": "not_testable",
 "fix_kernel_uname": "",
 "fix_baseline_reproduced": 1,
 "fix_patched_reproduced": 0,
 "fix_verdict": "fix.diff authored (one-line event swap + rationale) but kernel rebuild not performed in this run (non-memory-corruption, Low severity; validation deferred).",
 "fix_evidence": "fix.diff"
}