wifi: mac80211: check link ID in auth/assoc continuation
authorJohannes Berg <johannes.berg@intel.com>
Wed, 21 Sep 2022 21:01:46 +0000 (23:01 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Dec 2022 12:32:01 +0000 (13:32 +0100)
[ Upstream commit 85176a3fcd9748558cff72d4cdff5465b8732282 ]

Ensure that the link ID matches in auth/assoc continuation,
otherwise we need to reset all the data.

Fixes: 81151ce462e5 ("wifi: mac80211: support MLO authentication/association with one link")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/mac80211/ieee80211_i.h
net/mac80211/mlme.c

index a842f2e..de7b8a4 100644 (file)
@@ -390,6 +390,7 @@ struct ieee80211_mgd_auth_data {
        bool done, waiting;
        bool peer_confirmed;
        bool timeout_started;
+       int link_id;
 
        u8 ap_addr[ETH_ALEN] __aligned(2);
 
index 1fff44d..0125b3e 100644 (file)
@@ -6644,6 +6644,7 @@ int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata,
               req->ap_mld_addr ?: req->bss->bssid,
               ETH_ALEN);
        auth_data->bss = req->bss;
+       auth_data->link_id = req->link_id;
 
        if (req->auth_data_len >= 4) {
                if (req->auth_type == NL80211_AUTHTYPE_SAE) {
@@ -6662,7 +6663,8 @@ int ieee80211_mgd_auth(struct ieee80211_sub_if_data *sdata,
         * removal and re-addition of the STA entry in
         * ieee80211_prep_connection().
         */
-       cont_auth = ifmgd->auth_data && req->bss == ifmgd->auth_data->bss;
+       cont_auth = ifmgd->auth_data && req->bss == ifmgd->auth_data->bss &&
+                   ifmgd->auth_data->link_id == req->link_id;
 
        if (req->ie && req->ie_len) {
                memcpy(&auth_data->data[auth_data->data_len],
@@ -6986,7 +6988,8 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
 
                /* keep sta info, bssid if matching */
                match = ether_addr_equal(ifmgd->auth_data->ap_addr,
-                                        assoc_data->ap_addr);
+                                        assoc_data->ap_addr) &&
+                       ifmgd->auth_data->link_id == req->link_id;
                ieee80211_destroy_auth_data(sdata, match);
        }