wifi: mac80211: mlme: assign link address correctly
authorJohannes Berg <johannes.berg@intel.com>
Fri, 2 Sep 2022 14:12:38 +0000 (16:12 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Sat, 3 Sep 2022 15:02:34 +0000 (17:02 +0200)
Right now, we assign the link address only after we add
the link to the driver, which is quite obviously wrong.
It happens to work in many cases because it gets updated
immediately, and then link_conf updates may update it,
but it's clearly not really right.

Set the link address during ieee80211_mgd_setup_link()
so it's set before telling the driver about the link.

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

index 640a77f5e4132a2acb527d88660b963ae81d5908..20d123a1385ecae603adc21fc1e63044d2047b68 100644 (file)
@@ -6323,6 +6323,8 @@ void ieee80211_mgd_setup_link(struct ieee80211_link_data *link)
        if (sdata->u.mgd.assoc_data)
                ether_addr_copy(link->conf->addr,
                                sdata->u.mgd.assoc_data->link[link_id].addr);
+       else if (!is_valid_ether_addr(link->conf->addr))
+               eth_random_addr(link->conf->addr);
 }
 
 /* scan finished notification */
@@ -6410,9 +6412,6 @@ static int ieee80211_prep_connection(struct ieee80211_sub_if_data *sdata,
                goto out_err;
        }
 
-       if (mlo && !is_valid_ether_addr(link->conf->addr))
-               eth_random_addr(link->conf->addr);
-
        if (WARN_ON(!ifmgd->auth_data && !ifmgd->assoc_data)) {
                err = -EINVAL;
                goto out_err;