]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
wifi: mac80211: also verify requirements in EXT_SUPP_RATES
authorBenjamin Berg <benjamin.berg@intel.com>
Wed, 1 Jan 2025 05:05:37 +0000 (07:05 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 13 Jan 2025 14:26:45 +0000 (15:26 +0100)
Parse both the Supported Rates and BSS Membership Selectors as well as
the extended version of the tag when verifying whether we support all
features.

Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250101070249.f1840f19afa7.I12e3a0e634ce7014f5067256d9a6215fec6bf165@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/mlme.c

index 6b885e97e720cb4c4be1d91baeab80636f6efa05..9086639830d681051bc170fba55990022d9fcdac 100644 (file)
@@ -593,6 +593,8 @@ ieee80211_verify_sta_eht_mcs_support(struct ieee80211_sub_if_data *sdata,
 static void ieee80211_get_rates(struct ieee80211_supported_band *sband,
                                const u8 *supp_rates,
                                unsigned int supp_rates_len,
+                               const u8 *ext_supp_rates,
+                               unsigned int ext_supp_rates_len,
                                u32 *rates, u32 *basic_rates,
                                unsigned long *unknown_rates_selectors,
                                bool *have_higher_than_11mbit,
@@ -600,9 +602,12 @@ static void ieee80211_get_rates(struct ieee80211_supported_band *sband,
 {
        int i, j;
 
-       for (i = 0; i < supp_rates_len; i++) {
-               int rate = supp_rates[i] & 0x7f;
-               bool is_basic = !!(supp_rates[i] & 0x80);
+       for (i = 0; i < supp_rates_len + ext_supp_rates_len; i++) {
+               u8 supp_rate = i < supp_rates_len ?
+                               supp_rates[i] :
+                               ext_supp_rates[i - supp_rates_len];
+               int rate = supp_rate & 0x7f;
+               bool is_basic = !!(supp_rate & 0x80);
 
                if ((rate * 5) > 110 && have_higher_than_11mbit)
                        *have_higher_than_11mbit = true;
@@ -923,6 +928,7 @@ again:
        sband = sdata->local->hw.wiphy->bands[channel->band];
 
        ieee80211_get_rates(sband, elems->supp_rates, elems->supp_rates_len,
+                           elems->ext_supp_rates, elems->ext_supp_rates_len,
                            NULL, NULL, unknown_rates_selectors, NULL, NULL,
                            NULL);
 
@@ -5183,6 +5189,7 @@ static int ieee80211_mgd_setup_link_sta(struct ieee80211_link_data *link,
        sband = local->hw.wiphy->bands[cbss->channel->band];
 
        ieee80211_get_rates(sband, bss->supp_rates, bss->supp_rates_len,
+                           NULL, 0,
                            &rates, &basic_rates, NULL,
                            &have_higher_than_11mbit,
                            &min_rate, &min_rate_index);