DF-3905 / verdict.json
{ "finding_id": "DF-3905", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "certain", "verdict": "Source-certain logic inversion, hardware-gated (no Yukon silicon on the audit guest) -> inconclusive per family convention. sk_marv_miibus_writereg (sys/dev/netif/sk/if_sk.c:519-523) breaks its SMI write-completion wait as soon as YU_SMICR_BUSY is SET - i.e. the moment the write starts - and otherwise spins the full SK_TIMEOUT when the PHY is idle: the wait-for-completion never waits. The sibling driver for the same hardware implements the correct protocol: msk_phy_writereg (sys/dev/netif/msk/if_msk.c:417-428) breaks on (GM_SMI_CT_BUSY) == 0. Consequence on Yukon hardware: back-to-back SMI writes (miibus config, sk_init_yukon, mii_mediachg from the 1 Hz tick/media ioctls) can be issued while the previous PHY write is still in flight and silently dropped by the one-op-at-a-time SMI engine - intermittent PHY misconfiguration/link flaps. Functional-correctness bug, not memory corruption; severity Low. fix.diff inverts the condition to match msk_phy_writereg.", "exploit_chain": "", "evidence": "findings/poc/DF-3905/README.md (side-by-side with the msk sibling); findings/poc/DF-3905/fix.diff (condition inversion)", "kernel_refs": [ "sys/dev/netif/sk/if_sk.c:519", "sys/dev/netif/sk/if_sk.c:521", "sys/dev/netif/sk/yukonreg.h:166", "sys/dev/netif/msk/if_msk.c:423", "sys/dev/netif/msk/if_msk.c:427" ], "poc_changes": "No seed PoC; no runnable trigger exists without Yukon silicon (YUKON_SMICR MMIO). The proof is the source diff against the in-tree sibling driver for the same PHY.", "attempts": 0, "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": 0, "guest_dirty": 0, "build_cmd": "", "run_cmd": "", "code_hash": "", "notes": "Matches the pass-2 checklist item (f) XMAC/BCom PHY glue. Checked the read side too: sk_xmac_miibus_readreg/sk_marv_miibus_readreg return 0 on timeout (no uninitialized data), and sk_init_xmacs BRGPHY check (:2327) handles 0 sanely - the unchecked-PHY-read family (DF-3762 style) does NOT apply to if_sk.c.", "recommended_fix": "Invert the break condition in sk_marv_miibus_writereg to (... & YU_SMICR_BUSY) == 0, mirroring msk_phy_writereg.", "fix_status": "inconclusive", "fix_baseline_reproduced": 0, "fix_patched_reproduced": 0, "fix_verdict": "Two-token condition inversion, byte-identical in shape to the proven-correct msk_phy_writereg sibling. Not runnable on this guest (no Yukon NIC).", "fix_evidence": "findings/poc/DF-3905/fix.diff" } |