DF-2099 / fix.diff
diff --git a/sys/dev/netif/ath/ath_hal/ar5416/ar5416_gpio.c b/sys/dev/netif/ath/ath_hal/ar5416/ar5416_gpio.c @@ -88,6 +88,8 @@ #define N(a) (sizeof(a) / sizeof(a[0])) HALASSERT(gpio < AH_PRIVATE(ah)->ah_caps.halNumGpioPins); + if (gpio >= AH_PRIVATE(ah)->ah_caps.halNumGpioPins) + return AH_FALSE; /* * This table maps the HAL GPIO pins to the actual hardware @@ -139,6 +141,8 @@ uint32_t gpio_shift, reg; HALASSERT(gpio < AH_PRIVATE(ah)->ah_caps.halNumGpioPins); + if (gpio >= AH_PRIVATE(ah)->ah_caps.halNumGpioPins) + return AH_FALSE; HALDEBUG(ah, HAL_DEBUG_GPIO, "%s: gpio=%d\n", __func__, gpio); @@ -163,6 +167,8 @@ uint32_t reg; HALASSERT(gpio < AH_PRIVATE(ah)->ah_caps.halNumGpioPins); + if (gpio >= AH_PRIVATE(ah)->ah_caps.halNumGpioPins) + return AH_FALSE; HALDEBUG(ah, HAL_DEBUG_GPIO, "%s: gpio=%d, val=%d\n", __func__, gpio, val); @@ -191,7 +197,7 @@ */ if (AR_SREV_KIWI_10_OR_LATER(ah)) bits = MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR9287_GPIO_IN_VAL); - if (AR_SREV_KITE_10_OR_LATER(ah)) + else if (AR_SREV_KITE_10_OR_LATER(ah)) bits = MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR9285_GPIO_IN_VAL); else if (AR_SREV_MERLIN_10_OR_LATER(ah)) bits = MS(OS_REG_READ(ah, AR_GPIO_IN_OUT), AR928X_GPIO_IN_VAL); @@ -210,6 +216,8 @@ uint32_t val, mask; HALASSERT(gpio < AH_PRIVATE(ah)->ah_caps.halNumGpioPins); + if (gpio >= AH_PRIVATE(ah)->ah_caps.halNumGpioPins) + return; HALDEBUG(ah, HAL_DEBUG_GPIO, "%s: gpio=%d, ilevel=%d\n", __func__, gpio, ilevel); |