wifi: rtl8xxxu: fix potential use of uninitialized value
Subsystems (2)
PATCH v2 1/1 wifi: rtl8xxxu: fix potential use of uninitialized value
From: Yi Cong <[email protected]>
The local variables 'mcs' and 'nss' in rtl8xxxu_update_ra_report() are passed to rtl8xxxu_desc_to_mcsrate() as output parameters. If the helper function encounters an unhandled rate index, it may return without setting these values, leading to the use of uninitialized stack data.
Remove the helper rtl8xxxu_desc_to_mcsrate() and inline the logic into rtl8xxxu_update_ra_report(). This fixes the use of uninitialized 'mcs' and 'nss' variables for legacy rates.
The new implementation explicitly handles:
- Legacy rates: Set bitrate only.
- HT rates (MCS0-15): Set MCS flags, index, and NSS (1 or 2) directly.
- Invalid rates: Return early.
---
v2: Explicitly handle invalid rates by returning early instead of falling through.
--- drivers/net/wireless/realtek/rtl8xxxu/core.c | 28 ++++++-------------- 1 file changed, 8 insertions(+), 20 deletions(-)
drivers/net/wireless/realtek/rtl8xxxu/core.c +8 -20
@@ -4697,20 +4697,6 @@ static const struct ieee80211_rate rtl8xxxu_legacy_ratetable[] = { {.bitrate = 540, .hw_value = 0x0b,}, }; -static void rtl8xxxu_desc_to_mcsrate (u16 rate,u8 *mcs,u8 *nss) -{ -if (rate <=DESC_RATE_54M ) -return ; - -if (rate >=DESC_RATE_MCS0 && rate <=DESC_RATE_MCS15 ) { -if (rate <DESC_RATE_MCS8 ) - *nss =1 ; -else - *nss =2 ; - *mcs = rate -DESC_RATE_MCS0 ; - } -} -static void rtl8xxxu_set_basic_rates (struct rtl8xxxu_priv *priv,u32 rate_cfg) {struct ieee80211_hw *hw = priv->hw;
@@ -4820,23 +4806,25 @@ static void rtl8xxxu_set_aifs(struct rtl8xxxu_priv *priv, u8 slot_time)void rtl8xxxu_update_ra_report (struct rtl8xxxu_ra_report *rarpt,u8 rate,u8 sgi,u8 bw) { -u8 mcs, nss; - rarpt->txrate.flags =0 ;if (rate <=DESC_RATE_54M ) { rarpt->txrate.legacy = rtl8xxxu_legacy_ratetable[rate].bitrate; - }else { -rtl8xxxu_desc_to_mcsrate (rate, &mcs, &nss); + }else if (rate >=DESC_RATE_MCS0 && rate <=DESC_RATE_MCS15 ) { rarpt->txrate.flags |=RATE_INFO_FLAGS_MCS ; +if (rate <DESC_RATE_MCS8 ) + rarpt->txrate.nss =1 ; +else + rarpt->txrate.nss =2 ; - rarpt->txrate.mcs = mcs; - rarpt->txrate.nss = nss; + rarpt->txrate.mcs = rate -DESC_RATE_MCS0 ;if (sgi) rarpt->txrate.flags |=RATE_INFO_FLAGS_SHORT_GI ; rarpt->txrate.bw = bw; + }else { +return ; } rarpt->bit_rate =cfg80211_calculate_bitrate (&rarpt->txrate);
Signature · 1 line
2.25.1
Quoted 16 lines · Yi Cong
From: Yi Cong <[email protected]>
The local variables 'mcs' and 'nss' in
rtl8xxxu_update_ra_report()are passed tortl8xxxu_desc_to_mcsrate()as output parameters. If the helper function encounters an unhandled rate index, it may return without setting these values, leading to the use of uninitialized stack data.Remove the helper
rtl8xxxu_desc_to_mcsrate()and inline the logic intortl8xxxu_update_ra_report(). This fixes the use of uninitialized 'mcs' and 'nss' variables for legacy rates.The new implementation explicitly handles:
- Legacy rates: Set bitrate only.
- HT rates (MCS0-15): Set MCS flags, index, and NSS (1 or 2) directly.
- Invalid rates: Return early.
Quoted 5 lines
Fixes 7de16123d9e2 ("wifi: rtl8xxxu: Introduce rtl8xxxu_update_ra_report")Suggested-by Ping-Ke Shih <[email protected]>Signed-off-by Yi Cong <[email protected]>
1 patch(es) applied to rtw-next branch of rtw.git, thanks.
f8a2fc809bfe wifi: rtl8xxxu: fix potential use of uninitialized value