|
@@ -2795,8 +2795,7 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
|
|
if (!ieee80211_assoc_success(sdata, bss, mgmt, len)) {
|
|
if (!ieee80211_assoc_success(sdata, bss, mgmt, len)) {
|
|
/* oops -- internal error -- send timeout for now */
|
|
/* oops -- internal error -- send timeout for now */
|
|
ieee80211_destroy_assoc_data(sdata, false);
|
|
ieee80211_destroy_assoc_data(sdata, false);
|
|
- cfg80211_put_bss(sdata->local->hw.wiphy, bss);
|
|
|
|
- cfg80211_assoc_timeout(sdata->dev, mgmt->bssid);
|
|
|
|
|
|
+ cfg80211_assoc_timeout(sdata->dev, bss);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
sdata_info(sdata, "associated\n");
|
|
sdata_info(sdata, "associated\n");
|
|
@@ -3513,13 +3512,10 @@ void ieee80211_sta_work(struct ieee80211_sub_if_data *sdata)
|
|
time_after(jiffies, ifmgd->assoc_data->timeout)) {
|
|
time_after(jiffies, ifmgd->assoc_data->timeout)) {
|
|
if ((ifmgd->assoc_data->need_beacon && !ifmgd->have_beacon) ||
|
|
if ((ifmgd->assoc_data->need_beacon && !ifmgd->have_beacon) ||
|
|
ieee80211_do_assoc(sdata)) {
|
|
ieee80211_do_assoc(sdata)) {
|
|
- u8 bssid[ETH_ALEN];
|
|
|
|
-
|
|
|
|
- memcpy(bssid, ifmgd->assoc_data->bss->bssid, ETH_ALEN);
|
|
|
|
|
|
+ struct cfg80211_bss *bss = ifmgd->assoc_data->bss;
|
|
|
|
|
|
ieee80211_destroy_assoc_data(sdata, false);
|
|
ieee80211_destroy_assoc_data(sdata, false);
|
|
-
|
|
|
|
- cfg80211_assoc_timeout(sdata->dev, bssid);
|
|
|
|
|
|
+ cfg80211_assoc_timeout(sdata->dev, bss);
|
|
}
|
|
}
|
|
} else if (ifmgd->assoc_data && ifmgd->assoc_data->timeout_started)
|
|
} else if (ifmgd->assoc_data && ifmgd->assoc_data->timeout_started)
|
|
run_again(sdata, ifmgd->assoc_data->timeout);
|
|
run_again(sdata, ifmgd->assoc_data->timeout);
|
|
@@ -4445,8 +4441,11 @@ void ieee80211_mgd_stop(struct ieee80211_sub_if_data *sdata)
|
|
cancel_work_sync(&ifmgd->chswitch_work);
|
|
cancel_work_sync(&ifmgd->chswitch_work);
|
|
|
|
|
|
sdata_lock(sdata);
|
|
sdata_lock(sdata);
|
|
- if (ifmgd->assoc_data)
|
|
|
|
|
|
+ if (ifmgd->assoc_data) {
|
|
|
|
+ struct cfg80211_bss *bss = ifmgd->assoc_data->bss;
|
|
ieee80211_destroy_assoc_data(sdata, false);
|
|
ieee80211_destroy_assoc_data(sdata, false);
|
|
|
|
+ cfg80211_assoc_timeout(sdata->dev, bss);
|
|
|
|
+ }
|
|
if (ifmgd->auth_data)
|
|
if (ifmgd->auth_data)
|
|
ieee80211_destroy_auth_data(sdata, false);
|
|
ieee80211_destroy_auth_data(sdata, false);
|
|
del_timer_sync(&ifmgd->timer);
|
|
del_timer_sync(&ifmgd->timer);
|