WNM: Ignore WNM-Sleep Mode Response if WNM-Sleep Mode has not been used
The AP is not expected to send out a WNM-Sleep Mode Response frame without the STA trying to use WNM-Sleep Mode. Drop such unexpected responses to reduce unnecessary processing of the frame. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
8823178c96
commit
03ed0a5239
4 changed files with 11 additions and 0 deletions
|
@ -6905,6 +6905,7 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
|
||||||
}
|
}
|
||||||
|
|
||||||
eloop_cancel_timeout(wpas_network_reenabled, wpa_s, NULL);
|
eloop_cancel_timeout(wpas_network_reenabled, wpa_s, NULL);
|
||||||
|
wpa_s->wnmsleep_used = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -303,6 +303,7 @@ void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s)
|
||||||
wpa_s->key_mgmt = 0;
|
wpa_s->key_mgmt = 0;
|
||||||
|
|
||||||
wpas_rrm_reset(wpa_s);
|
wpas_rrm_reset(wpa_s);
|
||||||
|
wpa_s->wnmsleep_used = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -139,6 +139,8 @@ int ieee802_11_send_wnmsleep_req(struct wpa_supplicant *wpa_s,
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
wpa_printf(MSG_DEBUG, "Failed to send WNM-Sleep Request "
|
wpa_printf(MSG_DEBUG, "Failed to send WNM-Sleep Request "
|
||||||
"(action=%d, intval=%d)", action, intval);
|
"(action=%d, intval=%d)", action, intval);
|
||||||
|
else
|
||||||
|
wpa_s->wnmsleep_used = 1;
|
||||||
|
|
||||||
os_free(wnmsleep_ie);
|
os_free(wnmsleep_ie);
|
||||||
os_free(wnmtfs_ie);
|
os_free(wnmtfs_ie);
|
||||||
|
@ -255,6 +257,12 @@ static void ieee802_11_rx_wnmsleep_resp(struct wpa_supplicant *wpa_s,
|
||||||
const u8 *tfsresp_ie_end = NULL;
|
const u8 *tfsresp_ie_end = NULL;
|
||||||
size_t left;
|
size_t left;
|
||||||
|
|
||||||
|
if (!wpa_s->wnmsleep_used) {
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"WNM: Ignore WNM-Sleep Mode Response frame since WNM-Sleep Mode has not been used in this association");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (len < 3)
|
if (len < 3)
|
||||||
return;
|
return;
|
||||||
key_len_total = WPA_GET_LE16(frm + 1);
|
key_len_total = WPA_GET_LE16(frm + 1);
|
||||||
|
|
|
@ -669,6 +669,7 @@ struct wpa_supplicant {
|
||||||
unsigned int reattach:1; /* reassociation to the same BSS requested */
|
unsigned int reattach:1; /* reassociation to the same BSS requested */
|
||||||
unsigned int mac_addr_changed:1;
|
unsigned int mac_addr_changed:1;
|
||||||
unsigned int added_vif:1;
|
unsigned int added_vif:1;
|
||||||
|
unsigned int wnmsleep_used:1;
|
||||||
|
|
||||||
struct os_reltime last_mac_addr_change;
|
struct os_reltime last_mac_addr_change;
|
||||||
int last_mac_addr_style;
|
int last_mac_addr_style;
|
||||||
|
|
Loading…
Reference in a new issue