hostapd: fix a race condition related to assoc response tx status processing
SVN-Revision: 27022
This commit is contained in:
		| @@ -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; | ||||||
|  |   | ||||||
		Reference in New Issue
	
	Block a user
	 Felix Fietkau
					Felix Fietkau