⬢ DragonFlyBSD Kernel Audit
DF-4872 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/netif/ath/ath_hal/ar9002/ar9287_attach.c
+++ b/sys/dev/netif/ath/ath_hal/ar9002/ar9287_attach.c
@@ -432,6 +432,22 @@
 
 	if (!ar5416FillCapabilityInfo(ah))
 		return AH_FALSE;
+
+	/*
+	 * The AR9287 (Kiwi-2) is 2GHz-only silicon.  The 9287 EEPROM
+	 * layer refuses AR_EEP_AMODE (ah_eeprom_9287.c), but the shared
+	 * ar5416 GMODE block re-adds the 11A/11NA modes and the 5GHz
+	 * channel edges are inherited unconditionally.  Admitting 5GHz
+	 * modes lets regdomain-derived 5GHz channels into the channel
+	 * list even though the EEPROM carries only 2GHz calibration
+	 * data (NULL pier walk -> panic in ar9287_reset.c).  Clamp here.
+	 */
+	pCap->halWirelessModes &= ~(HAL_MODE_11A | HAL_MODE_TURBO |
+	    HAL_MODE_108A | HAL_MODE_11A_HALF_RATE | HAL_MODE_11A_QUARTER_RATE |
+	    HAL_MODE_11NA_HT20 | HAL_MODE_11NA_HT40PLUS |
+	    HAL_MODE_11NA_HT40MINUS);
+	pCap->halLow5GhzChan = 0;
+	pCap->halHigh5GhzChan = 0;
 	pCap->halNumGpioPins = 10;
 	pCap->halWowSupport = AH_TRUE;
 	pCap->halWowMatchPatternExact = AH_TRUE;