mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 00:38:24 -05:00
Move Hotspot 2.0 element in (Re)Association Request frames
According to IEEE Std 802.11-2012, Table 8-22, vendor specific elements must follow all other elements, so Hotspot 2.0 element which is actually a vendor specific element must come after all other elements. Signed-off-by: Avraham Stern <avraham.stern@intel.com>
This commit is contained in:
parent
a0c38e5dd7
commit
c484b19882
@ -419,28 +419,6 @@ static void sme_send_authentication(struct wpa_supplicant *wpa_s,
|
|||||||
}
|
}
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
|
|
||||||
#ifdef CONFIG_HS20
|
|
||||||
if (is_hs20_network(wpa_s, ssid, bss)) {
|
|
||||||
struct wpabuf *hs20;
|
|
||||||
hs20 = wpabuf_alloc(20);
|
|
||||||
if (hs20) {
|
|
||||||
int pps_mo_id = hs20_get_pps_mo_id(wpa_s, ssid);
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
wpas_hs20_add_indication(hs20, pps_mo_id);
|
|
||||||
len = sizeof(wpa_s->sme.assoc_req_ie) -
|
|
||||||
wpa_s->sme.assoc_req_ie_len;
|
|
||||||
if (wpabuf_len(hs20) <= len) {
|
|
||||||
os_memcpy(wpa_s->sme.assoc_req_ie +
|
|
||||||
wpa_s->sme.assoc_req_ie_len,
|
|
||||||
wpabuf_head(hs20), wpabuf_len(hs20));
|
|
||||||
wpa_s->sme.assoc_req_ie_len += wpabuf_len(hs20);
|
|
||||||
}
|
|
||||||
wpabuf_free(hs20);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_HS20 */
|
|
||||||
|
|
||||||
#ifdef CONFIG_FST
|
#ifdef CONFIG_FST
|
||||||
if (wpa_s->fst_ies) {
|
if (wpa_s->fst_ies) {
|
||||||
int fst_ies_len = wpabuf_len(wpa_s->fst_ies);
|
int fst_ies_len = wpabuf_len(wpa_s->fst_ies);
|
||||||
@ -486,6 +464,29 @@ static void sme_send_authentication(struct wpa_supplicant *wpa_s,
|
|||||||
os_memcpy(pos, ext_capab, ext_capab_len);
|
os_memcpy(pos, ext_capab, ext_capab_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_HS20
|
||||||
|
if (is_hs20_network(wpa_s, ssid, bss)) {
|
||||||
|
struct wpabuf *hs20;
|
||||||
|
|
||||||
|
hs20 = wpabuf_alloc(20);
|
||||||
|
if (hs20) {
|
||||||
|
int pps_mo_id = hs20_get_pps_mo_id(wpa_s, ssid);
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
wpas_hs20_add_indication(hs20, pps_mo_id);
|
||||||
|
len = sizeof(wpa_s->sme.assoc_req_ie) -
|
||||||
|
wpa_s->sme.assoc_req_ie_len;
|
||||||
|
if (wpabuf_len(hs20) <= len) {
|
||||||
|
os_memcpy(wpa_s->sme.assoc_req_ie +
|
||||||
|
wpa_s->sme.assoc_req_ie_len,
|
||||||
|
wpabuf_head(hs20), wpabuf_len(hs20));
|
||||||
|
wpa_s->sme.assoc_req_ie_len += wpabuf_len(hs20);
|
||||||
|
}
|
||||||
|
wpabuf_free(hs20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_HS20 */
|
||||||
|
|
||||||
if (wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ]) {
|
if (wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ]) {
|
||||||
struct wpabuf *buf = wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ];
|
struct wpabuf *buf = wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ];
|
||||||
size_t len;
|
size_t len;
|
||||||
|
@ -2254,26 +2254,6 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
|
|||||||
os_memset(wpa_s->p2p_ip_addr_info, 0, sizeof(wpa_s->p2p_ip_addr_info));
|
os_memset(wpa_s->p2p_ip_addr_info, 0, sizeof(wpa_s->p2p_ip_addr_info));
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
|
|
||||||
#ifdef CONFIG_HS20
|
|
||||||
if (is_hs20_network(wpa_s, ssid, bss)) {
|
|
||||||
struct wpabuf *hs20;
|
|
||||||
hs20 = wpabuf_alloc(20);
|
|
||||||
if (hs20) {
|
|
||||||
int pps_mo_id = hs20_get_pps_mo_id(wpa_s, ssid);
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
wpas_hs20_add_indication(hs20, pps_mo_id);
|
|
||||||
len = sizeof(wpa_ie) - wpa_ie_len;
|
|
||||||
if (wpabuf_len(hs20) <= len) {
|
|
||||||
os_memcpy(wpa_ie + wpa_ie_len,
|
|
||||||
wpabuf_head(hs20), wpabuf_len(hs20));
|
|
||||||
wpa_ie_len += wpabuf_len(hs20);
|
|
||||||
}
|
|
||||||
wpabuf_free(hs20);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* CONFIG_HS20 */
|
|
||||||
|
|
||||||
#ifdef CONFIG_MBO
|
#ifdef CONFIG_MBO
|
||||||
if (bss) {
|
if (bss) {
|
||||||
mbo = wpa_bss_get_vendor_ie(bss, MBO_IE_VENDOR_TYPE);
|
mbo = wpa_bss_get_vendor_ie(bss, MBO_IE_VENDOR_TYPE);
|
||||||
@ -2314,6 +2294,27 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_HS20
|
||||||
|
if (is_hs20_network(wpa_s, ssid, bss)) {
|
||||||
|
struct wpabuf *hs20;
|
||||||
|
|
||||||
|
hs20 = wpabuf_alloc(20);
|
||||||
|
if (hs20) {
|
||||||
|
int pps_mo_id = hs20_get_pps_mo_id(wpa_s, ssid);
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
wpas_hs20_add_indication(hs20, pps_mo_id);
|
||||||
|
len = sizeof(wpa_ie) - wpa_ie_len;
|
||||||
|
if (wpabuf_len(hs20) <= len) {
|
||||||
|
os_memcpy(wpa_ie + wpa_ie_len,
|
||||||
|
wpabuf_head(hs20), wpabuf_len(hs20));
|
||||||
|
wpa_ie_len += wpabuf_len(hs20);
|
||||||
|
}
|
||||||
|
wpabuf_free(hs20);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_HS20 */
|
||||||
|
|
||||||
if (wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ]) {
|
if (wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ]) {
|
||||||
struct wpabuf *buf = wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ];
|
struct wpabuf *buf = wpa_s->vendor_elem[VENDOR_ELEM_ASSOC_REQ];
|
||||||
size_t len;
|
size_t len;
|
||||||
|
Loading…
Reference in New Issue
Block a user