]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: iwlwifi: mvm: use only beacon BSS load for active links
authorJohannes Berg <johannes.berg@intel.com>
Mon, 27 May 2024 16:06:08 +0000 (19:06 +0300)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 29 May 2024 08:33:50 +0000 (10:33 +0200)
For active links, don't take information that may have been
received in probe responses, as those are not protected. For
inactive links, there may not be a choice.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240527190228.6947dc462fa9.I2076961211d6785c8a15b4308e0e87a413148222@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/link.c
drivers/net/wireless/intel/iwlwifi/mvm/tests/links.c

index 0745229c8c37529e4b26dc555bfe110a5efaa7e3..02a475a1f1b8a535f48ae0c7d06661e64ae34b6e 100644 (file)
@@ -492,17 +492,27 @@ iwl_mvm_get_puncturing_factor(const struct ieee80211_bss_conf *link_conf)
 static unsigned int
 iwl_mvm_get_chan_load(struct ieee80211_bss_conf *link_conf)
 {
+       struct ieee80211_vif *vif = link_conf->vif;
        struct iwl_mvm_vif_link_info *mvm_link =
                iwl_mvm_vif_from_mac80211(link_conf->vif)->link[link_conf->link_id];
        const struct element *bss_load_elem;
        const struct ieee80211_bss_load_elem *bss_load;
        enum nl80211_band band = link_conf->chanreq.oper.chan->band;
+       const struct cfg80211_bss_ies *ies;
        unsigned int chan_load;
        u32 chan_load_by_us;
 
        rcu_read_lock();
-       bss_load_elem = ieee80211_bss_get_elem(link_conf->bss,
-                                              WLAN_EID_QBSS_LOAD);
+       if (ieee80211_vif_link_active(vif, link_conf->link_id))
+               ies = rcu_dereference(link_conf->bss->beacon_ies);
+       else
+               ies = rcu_dereference(link_conf->bss->ies);
+
+       if (ies)
+               bss_load_elem = cfg80211_find_elem(WLAN_EID_QBSS_LOAD,
+                                                  ies->data, ies->len);
+       else
+               bss_load_elem = NULL;
 
        /* If there isn't BSS Load element, take the defaults */
        if (!bss_load_elem ||
index 6a680b5d03e02aea71a52ad207ea9e88b1d06512..47b8e7b64ead46195ba4edf7945d89d5736cd102 100644 (file)
@@ -208,6 +208,7 @@ static void setup_link_conf(struct kunit *test)
        bss_load->channel_util = params->channel_util;
 
        rcu_assign_pointer(bss.ies, ies);
+       rcu_assign_pointer(bss.beacon_ies, ies);
 }
 
 static void test_link_grading(struct kunit *test)