DF-3977 / verdict.json
{ "finding_id": "DF-3977", "status": "inconclusive", "reproduced": 0, "impact": "none", "confidence": "likely", "verdict": "ar5212GetLowerUpperValues (ar5212_reset.c:2639/2643) dereferences lp[0] and ep[-1] before any listSize check; with the empty pier lists reachable from a zeroed/crafted EEPROM (ee_numTargetPwr_*==0 via ah_eeprom_v3.c:973-999, or a CTL with non-zero index and all-zero edges via ar5212_reset.c:2500-2505) this performs an uninitialized stack read and a 2-byte OOB stack read below the callers tempChannelList[], and lets garbage select CTL edge power \u2014 worst case MAX_RATE_POWER (63) programmed for the channel (regulatory TX-power bypass). No disclosure/write primitive; Low, AV:P, consistent with the ar5416 EEPROM family (DF-1308/1309/3960). All other pass-2 checklist items for this file were driven to verified-negative conclusions (ctl walks bounded by construction in all EEPROM backends; gain-boundary code lives in the RF backends; spur-mitigation shifts provably in range; CorrectGainDelta clamps hold by range analysis).", "exploit_chain": "", "evidence": "README.md (reachable-empty-list conditions + the full negative-result list); VERDICT.md; fix.diff (three guards)", "kernel_refs": [ "sys/dev/netif/ath/ath_hal/ar5212/ar5212_reset.c:2639", "sys/dev/netif/ath/ath_hal/ar5212/ar5212_reset.c:2643", "sys/dev/netif/ath/ath_hal/ar5212/ar5212_reset.c:2500", "sys/dev/netif/ath/ath_hal/ar5212/ar5212_reset.c:2510", "sys/dev/netif/ath/ath_hal/ar5212/ar5212_reset.c:2579", "sys/dev/netif/ath/ath_hal/ah_eeprom_v3.c:973", "sys/dev/netif/ath/ath_hal/ah_eeprom_v3.c:964" ], "poc_changes": "No PoC: hardware-gated (needs an AR5212-family card with zeroed EEPROM target-power/CTL blocks).", "attempts": 1, "guest_uname": "DragonFly dfbsd 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": 10, "guest_dirty": 0, "build_cmd": "", "run_cmd": "", "code_hash": "", "notes": "File otherwise clean at pass-2 depth: rate-power/CTL/target-power walks bounded by construction; the DF-1308 BCHAN_UNUSED and DF-3960 gain-boundary twins do not apply to this files code.", "recommended_fix": "Guard listSize==0 in ar5212GetLowerUpperValues and early-out in ar5212GetMaxEdgePower/ar5212GetTargetPowers when the pier list is empty.", "fix_status": "not_testable", "fix_baseline_reproduced": null, "fix_patched_reproduced": null, "fix_verdict": "fix.diff authored (three guards); not runtime-testable without an Atheros NIC.", "fix_evidence": "findings/poc/DF-3977/fix.diff" } |