diff --git a/sys/dev/netif/ath/ath_hal/ar5312/ar5315_gpio.c b/sys/dev/netif/ath/ath_hal/ar5312/ar5315_gpio.c --- a/sys/dev/netif/ath/ath_hal/ar5312/ar5315_gpio.c +++ b/sys/dev/netif/ath/ath_hal/ar5312/ar5315_gpio.c @@ -40,6 +40,8 @@ uint32_t gpioOffset = (AR5315_GPIO_BASE - ((uint32_t) ah->ah_sh)); HALASSERT(gpio < AR_NUM_GPIO); + if (gpio >= AR_NUM_GPIO) + return AH_FALSE; OS_REG_WRITE(ah, gpioOffset+AR5315_GPIODIR, (OS_REG_READ(ah, gpioOffset+AR5315_GPIODIR) &~ AR5315_GPIODIR_M(gpio)) @@ -57,6 +59,8 @@ uint32_t gpioOffset = (AR5315_GPIO_BASE - ((uint32_t) ah->ah_sh)); HALASSERT(gpio < AR_NUM_GPIO); + if (gpio >= AR_NUM_GPIO) + return AH_FALSE; OS_REG_WRITE(ah, gpioOffset+AR5315_GPIODIR, (OS_REG_READ(ah, gpioOffset+AR5315_GPIODIR) &~ AR5315_GPIODIR_M(gpio)) @@ -75,6 +79,8 @@ uint32_t gpioOffset = (AR5315_GPIO_BASE - ((uint32_t) ah->ah_sh)); HALASSERT(gpio < AR_NUM_GPIO); + if (gpio >= AR_NUM_GPIO) + return AH_FALSE; reg = OS_REG_READ(ah, gpioOffset+AR5315_GPIODO); reg &= ~(1 << gpio); @@ -110,7 +116,8 @@ uint32_t val; uint32_t gpioOffset = (AR5315_GPIO_BASE - ((uint32_t) ah->ah_sh)); - /* XXX bounds check gpio */ + if (gpio >= AR_NUM_GPIO) + return; val = OS_REG_READ(ah, gpioOffset+AR5315_GPIOINT); val &= ~(AR5315_GPIOINT_M | AR5315_GPIOINTLVL_M); val |= gpio << AR5315_GPIOINT_S;