[PATCH v2 1/4] wifi: mt7601u: fix out-of-bounds access in rate index

From: John Robin

Date: Sun Nov 08 2026 - 02:22:06 EST


The rate->idx value can occasionally exceed the supported band's
bitrates array length, leading to a memory out-of-bounds access.
Add a bounds check to safely fall back to CCK rates if the index
is invalid.

Signed-off-by: John Robin <johnrobin044@xxxxxxxxx>
---
drivers/net/wireless/mediatek/mt7601u/mac.c | 32 +++++++++++++--------
1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/drivers/net/wireless/mediatek/mt7601u/mac.c b/drivers/net/wireless/mediatek/mt7601u/mac.c
index ca9cf628eb10d..bf485dabca745 100644
--- a/drivers/net/wireless/mediatek/mt7601u/mac.c
+++ b/drivers/net/wireless/mediatek/mt7601u/mac.c
@@ -118,19 +118,27 @@ u16 mt76_mac_tx_rate_val(struct mt7601u_dev *dev,
if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
bw = 1;
} else {
- const struct ieee80211_rate *r;
- int band = dev->chandef.chan->band;
- u16 val;
-
- r = &dev->hw->wiphy->bands[band]->bitrates[rate->idx];
- if (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
- val = r->hw_value_short;
- else
- val = r->hw_value;

- phy = val >> 8;
- rate_idx = val & 0xff;
- bw = 0;
+ int band = dev->chandef.chan->band;
+ struct ieee80211_supported_band *sband =
+ dev->hw->wiphy->bands[band];
+
+ if (rate->idx < 0 || rate->idx >= sband->n_bitrates) {
+ phy = MT_PHY_TYPE_CCK;
+ rate_idx = 0;
+ } else {
+ const struct ieee80211_rate *r =
+ &sband->bitrates[rate->idx];
+ u16 val;
+
+ if (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
+ val = r->hw_value_short;
+ else
+ val = r->hw_value;
+
+ phy = val >> 8;
+ rate_idx = val & 0xff;
+ }
}

rateval = FIELD_PREP(MT_RXWI_RATE_MCS, rate_idx);
--
2.56.0