DF-4343 / verdict.json
{ "finding_id": "DF-4343", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "Static, deterministic defect class (attach error-path symmetry); runtime paths unreachable on the audit guest (no Munich32X PCI device, driver optional mn netgraph not built, kldload ENOENT). Verified from source: both BAR struct resource handles are stored only in the local res and discarded (if_mn.c:1302,1311) so they can never be released; the ENXIO returns at 1314, 1326, 1334 leak every previously allocated resource; mn_reset failure and ng_make_node_common failure return 0 = attach success (1353-1355, 1386-1389); the ng_name_node failure path frees the node (ng_rmnode+ng_unref, refs 1->0 because ngmn_shutdown is a no-op returning EINVAL) while sc->node keeps the dangling pointer and attach still reports success (1392-1396); there is no device_detach at all (1402-1411). Guest-side grep confirmation in run.log: 0 bus_release_resource, 0 device_detach in the file.", "exploit_chain": "", "evidence": "README.md (five cited sites); VERDICT.md; run.log (guest greps: 0 releases / 0 detach; hardware absent); fix.diff (git apply --check OK)", "kernel_refs": [ "sys/dev/netif/mn/if_mn.c:1302", "sys/dev/netif/mn/if_mn.c:1311", "sys/dev/netif/mn/if_mn.c:1314", "sys/dev/netif/mn/if_mn.c:1326", "sys/dev/netif/mn/if_mn.c:1334", "sys/dev/netif/mn/if_mn.c:1353", "sys/dev/netif/mn/if_mn.c:1386", "sys/dev/netif/mn/if_mn.c:1392", "sys/dev/netif/mn/if_mn.c:1402", "sys/dev/netif/mn/if_mn.c:280" ], "poc_changes": "no runtime trigger exists for this class; source citations + guest greps are the demonstration", "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": 12, "guest_dirty": 0, "build_cmd": "n/a", "run_cmd": "./run.sh guest (see run.log)", "code_hash": "", "notes": "Low/hardening tier: privileged attach-time paths; resource leak (CWE-772), success-on-failure (CWE-252), dangling sc->node. Full device_detach additionally recommended upstream.", "recommended_fix": "Retain both BAR resource handles in softc, release them + IRQ on every error path, return ENXIO on mn_reset/node-creation/name failures and NULL sc->node after destroying it; add device_detach (fix.diff carries the minimal half)", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "No baseline possible on this guest (hardware absent). fix.diff is line-accurate (git apply --check clean) and restores error-path symmetry for every cited site except the still-recommended full device_detach.", "fix_evidence": "findings/poc/DF-4343/fix.diff" } |