wlantest: Do not ignore RSN/WPA/OSEN element before full BSS info

wlantest used to ignore RSN/WPA/OSEN element in (Re)Association Request
frame if no Beacon frame had been seen from the AP before the
association exchange. This could result in not being able to derive keys
properly. Work around this by skipping that step if the BSS entry is not
yet complete.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2017-11-14 12:55:48 +02:00 committed by Jouni Malinen
parent 5420bcf477
commit 878723b920
3 changed files with 8 additions and 3 deletions

View file

@ -223,6 +223,7 @@ void bss_update(struct wlantest *wt, struct wlantest_bss *bss,
if (!update) if (!update)
return; return;
bss->beacon_seen = 1;
bss->prev_capab_info = bss->capab_info; bss->prev_capab_info = bss->capab_info;
bss->proto = 0; bss->proto = 0;
bss->pairwise_cipher = 0; bss->pairwise_cipher = 0;

View file

@ -66,7 +66,8 @@ void sta_update_assoc(struct wlantest_sta *sta, struct ieee802_11_elems *elems)
struct wpa_ie_data data; struct wpa_ie_data data;
struct wlantest_bss *bss = sta->bss; struct wlantest_bss *bss = sta->bss;
if (elems->wpa_ie && !bss->wpaie[0]) { if (elems->wpa_ie && !bss->wpaie[0] &&
(bss->beacon_seen || bss->proberesp_seen)) {
wpa_printf(MSG_INFO, "WPA IE included in Association Request " wpa_printf(MSG_INFO, "WPA IE included in Association Request "
"frame from " MACSTR " even though BSS does not " "frame from " MACSTR " even though BSS does not "
"use WPA - ignore IE", "use WPA - ignore IE",
@ -74,7 +75,8 @@ void sta_update_assoc(struct wlantest_sta *sta, struct ieee802_11_elems *elems)
elems->wpa_ie = NULL; elems->wpa_ie = NULL;
} }
if (elems->rsn_ie && !bss->rsnie[0]) { if (elems->rsn_ie && !bss->rsnie[0] &&
(bss->beacon_seen || bss->proberesp_seen)) {
wpa_printf(MSG_INFO, "RSN IE included in Association Request " wpa_printf(MSG_INFO, "RSN IE included in Association Request "
"frame from " MACSTR " even though BSS does not " "frame from " MACSTR " even though BSS does not "
"use RSN - ignore IE", "use RSN - ignore IE",
@ -82,7 +84,8 @@ void sta_update_assoc(struct wlantest_sta *sta, struct ieee802_11_elems *elems)
elems->rsn_ie = NULL; elems->rsn_ie = NULL;
} }
if (elems->osen && !bss->osenie[0]) { if (elems->osen && !bss->osenie[0] &&
(bss->beacon_seen || bss->proberesp_seen)) {
wpa_printf(MSG_INFO, "OSEN IE included in Association Request " wpa_printf(MSG_INFO, "OSEN IE included in Association Request "
"frame from " MACSTR " even though BSS does not " "frame from " MACSTR " even though BSS does not "
"use OSEN - ignore IE", "use OSEN - ignore IE",

View file

@ -129,6 +129,7 @@ struct wlantest_bss {
u16 prev_capab_info; u16 prev_capab_info;
u8 ssid[32]; u8 ssid[32];
size_t ssid_len; size_t ssid_len;
int beacon_seen;
int proberesp_seen; int proberesp_seen;
int parse_error_reported; int parse_error_reported;
u8 wpaie[257]; u8 wpaie[257];