hostapd: fix a race condition related to assoc response tx status processing
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@27022 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
c8eee43263
commit
b132141413
|
@ -0,0 +1,48 @@
|
|||
--- a/src/ap/ieee802_11.c
|
||||
+++ b/src/ap/ieee802_11.c
|
||||
@@ -1629,13 +1629,6 @@ static void handle_assoc_cb(struct hosta
|
||||
int new_assoc = 1;
|
||||
struct ieee80211_ht_capabilities ht_cap;
|
||||
|
||||
- if (!ok) {
|
||||
- hostapd_logger(hapd, mgmt->da, HOSTAPD_MODULE_IEEE80211,
|
||||
- HOSTAPD_LEVEL_DEBUG,
|
||||
- "did not acknowledge association response");
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
if (len < IEEE80211_HDRLEN + (reassoc ? sizeof(mgmt->u.reassoc_resp) :
|
||||
sizeof(mgmt->u.assoc_resp))) {
|
||||
printf("handle_assoc_cb(reassoc=%d) - too short payload "
|
||||
@@ -1643,11 +1636,6 @@ static void handle_assoc_cb(struct hosta
|
||||
return;
|
||||
}
|
||||
|
||||
- if (reassoc)
|
||||
- status = le_to_host16(mgmt->u.reassoc_resp.status_code);
|
||||
- else
|
||||
- status = le_to_host16(mgmt->u.assoc_resp.status_code);
|
||||
-
|
||||
sta = ap_get_sta(hapd, mgmt->da);
|
||||
if (!sta) {
|
||||
printf("handle_assoc_cb: STA " MACSTR " not found\n",
|
||||
@@ -1655,6 +1643,19 @@ static void handle_assoc_cb(struct hosta
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (!ok) {
|
||||
+ hostapd_logger(hapd, mgmt->da, HOSTAPD_MODULE_IEEE80211,
|
||||
+ HOSTAPD_LEVEL_DEBUG,
|
||||
+ "did not acknowledge association response");
|
||||
+ sta->flags &= ~WLAN_STA_ASSOC_REQ_OK;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (reassoc)
|
||||
+ status = le_to_host16(mgmt->u.reassoc_resp.status_code);
|
||||
+ else
|
||||
+ status = le_to_host16(mgmt->u.assoc_resp.status_code);
|
||||
+
|
||||
if (status != WLAN_STATUS_SUCCESS)
|
||||
goto fail;
|
||||
|
Loading…
Reference in New Issue