DF-3681 / verdict.json
{ "finding_id": "DF-3681", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "likely", "verdict": "Source-likely, runtime-inconclusive: igb_timer() (blocking lwkt_serialize_enter at if_igb.c:1313, self re-arm at :1318) and igb_txgc_timer() (goto-done re-arm at :349) are torn down only with callout_stop(), which sys/kern/kern_timeout.c:1087-1098 documents as not interlocking against an in-progress callback; igb_detach() (:742-802) never calls callout_terminate() for either. A callback parked on main_serialize during the detach critical section deterministically re-arms after the serializers are dropped and fires ~1s later into the freed softc/rings (UAF; unmapped text under kldunload). ix(4) already gained callout_terminate for its timer after DF-3669 \u2014 igb lacks it entirely. Guest has no igb hardware so the race cannot be exercised.", "exploit_chain": "", "evidence": "findings/poc/DF-3681/VERDICT.md (re-arm sites :1318/:349; stop sites :1436/:1447; detach :742-802 with no terminate; kern_timeout.c callout_stop vs callout_terminate semantics); run.log (no igb device on guest); fix.diff (callout_terminate in detach)", "kernel_refs": [ "sys/dev/netif/igb/if_igb.c:1313", "sys/dev/netif/igb/if_igb.c:1318", "sys/dev/netif/igb/if_igb.c:327", "sys/dev/netif/igb/if_igb.c:337", "sys/dev/netif/igb/if_igb.c:349", "sys/dev/netif/igb/if_igb.c:742", "sys/dev/netif/igb/if_igb.c:784", "sys/dev/netif/igb/if_igb.c:1436", "sys/dev/netif/igb/if_igb.c:1447", "sys/kern/kern_timeout.c:1091", "sys/kern/kern_timeout.c:1104", "sys/dev/netif/ix/if_ix.c:693" ], "poc_changes": "No runnable PoC without igb hardware; trigger.c documents the kldunload-vs-igb_timer race procedure; run.sh performs the module-presence/device-absence probe.", "attempts": 1, "guest_uname": "DragonFly dfbsd 6.5-DEVELOPMENT #0: Thu Jul 2 06:02:54 UTC 2026 x86_64", "runtime_sec": 20, "guest_dirty": 0, "build_cmd": "sh build.sh (no-op: hardware race trigger)", "run_cmd": "dfbsd-qemu/vm.sh run_root kldstat | grep -i igb; ifconfig -a | grep -c ^igb; ls -l /boot/kernel/if_igb.ko", "code_hash": "", "notes": "Trigger requires admin-initiated detach (kldunload/devctl) overlapping a fired timer; impact is UAF on freed softc/ring slab and callout-queue corruption. Consistent with DF-3669 (ix) Low/likely grading.", "recommended_fix": "callout_terminate() sc->timer and every tx_gc_timer in igb_detach() after ifnet_deserialize_all(), before ether_ifdetach()/ring free.", "fix_status": "not_testable", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "fix.diff authored against the read-only sys/ tree; cannot be validated without igb hardware.", "fix_evidence": "findings/poc/DF-3681/fix.diff" } |