wifi: mac80211: mlme: fix null-ptr deref on failed assoc
If association to an AP without a link 0 fails, then we crash in
tracing because it assumes that either ap_mld_addr or link 0 BSS
is valid, since we clear sdata->vif.valid_links and then don't
add the ap_mld_addr to the struct.
Since we clear also sdata->vif.cfg.ap_addr, keep a local copy of
it and assign it earlier, before clearing valid_links, to fix
this.
Fixes: 81151ce462
("wifi: mac80211: support MLO authentication/association with one link")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
1177aaa7fe
commit
78a6a43aaf
|
@ -5082,6 +5082,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
|
|||
struct cfg80211_rx_assoc_resp resp = {
|
||||
.uapsd_queues = -1,
|
||||
};
|
||||
u8 ap_mld_addr[ETH_ALEN] __aligned(2);
|
||||
unsigned int link_id;
|
||||
|
||||
sdata_assert_lock(sdata);
|
||||
|
@ -5251,6 +5252,11 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
|
|||
resp.uapsd_queues |= ieee80211_ac_to_qos_mask[ac];
|
||||
}
|
||||
|
||||
if (sdata->vif.valid_links) {
|
||||
ether_addr_copy(ap_mld_addr, sdata->vif.cfg.ap_addr);
|
||||
resp.ap_mld_addr = ap_mld_addr;
|
||||
}
|
||||
|
||||
ieee80211_destroy_assoc_data(sdata,
|
||||
status_code == WLAN_STATUS_SUCCESS ?
|
||||
ASSOC_SUCCESS :
|
||||
|
@ -5260,8 +5266,6 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
|
|||
resp.len = len;
|
||||
resp.req_ies = ifmgd->assoc_req_ies;
|
||||
resp.req_ies_len = ifmgd->assoc_req_ies_len;
|
||||
if (sdata->vif.valid_links)
|
||||
resp.ap_mld_addr = sdata->vif.cfg.ap_addr;
|
||||
cfg80211_rx_assoc_resp(sdata->dev, &resp);
|
||||
notify_driver:
|
||||
drv_mgd_complete_tx(sdata->local, sdata, &info);
|
||||
|
|
Loading…
Reference in New Issue