ath9k: reject invalid antenna mask configurations
[lede.git] / package / mac80211 / patches / 561-ath9k_antenna_mask_validate.patch
1 --- a/drivers/net/wireless/ath/ath9k/main.c
2 +++ b/drivers/net/wireless/ath/ath9k/main.c
3 @@ -1929,12 +1929,24 @@ static u32 fill_chainmask(u32 cap, u32 n
4         return filled;
5  }
6  
7 +static bool validate_antenna_mask(u32 val)
8 +{
9 +       switch (val & 0x7) {
10 +       case 0x1:
11 +       case 0x3:
12 +       case 0x7:
13 +               return true;
14 +       default:
15 +               return false;
16 +       }
17 +}
18 +
19  static int ath9k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)
20  {
21         struct ath_softc *sc = hw->priv;
22         struct ath_hw *ah = sc->sc_ah;
23  
24 -       if (!rx_ant || !tx_ant)
25 +       if (!validate_antenna_mask(rx_ant) || !validate_antenna_mask(tx_ant))
26                 return -EINVAL;
27  
28         sc->ant_rx = rx_ant;