]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
ath9k_htc: fix potential out of bounds access with invalid rxstatus->rs_keyix
authorDan Carpenter <dan.carpenter@oracle.com>
Sat, 9 Apr 2022 06:12:25 +0000 (09:12 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jun 2022 08:21:02 +0000 (10:21 +0200)
[ Upstream commit 2dc509305cf956381532792cb8dceef2b1504765 ]

The "rxstatus->rs_keyix" eventually gets passed to test_bit() so we need to
ensure that it is within the bitmap.

drivers/net/wireless/ath/ath9k/common.c:46 ath9k_cmn_rx_accept()
error: passing untrusted data 'rx_stats->rs_keyix' to 'test_bit()'

Fixes: 4ed1a8d4a257 ("ath9k_htc: use ath9k_cmn_rx_accept")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Toke Høiland-Jørgensen <toke@toke.dk>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://lore.kernel.org/r/20220409061225.GA5447@kili
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/ath/ath9k/htc_drv_txrx.c

index 0bdc4dcb7b8fee33dadcf97bab27fd66600eefed..30ddf333e04dc26f97c6c9d8aefe98edb5d3572c 100644 (file)
@@ -1006,6 +1006,14 @@ static bool ath9k_rx_prepare(struct ath9k_htc_priv *priv,
                goto rx_next;
        }
 
+       if (rxstatus->rs_keyix >= ATH_KEYMAX &&
+           rxstatus->rs_keyix != ATH9K_RXKEYIX_INVALID) {
+               ath_dbg(common, ANY,
+                       "Invalid keyix, dropping (keyix: %d)\n",
+                       rxstatus->rs_keyix);
+               goto rx_next;
+       }
+
        /* Get the RX status information */
 
        memset(rx_status, 0, sizeof(struct ieee80211_rx_status));