From: Benjamin Berg <benjamin.berg@xxxxxxxxx> Use the wpa_bss_get_rsne helper as that does a proper fallback in case no supported ciphers exist. This makes the check forward compatible in case the RSNE Override 2 contains only unsupported ciphers. Signed-off-by: Benjamin Berg <benjamin.berg@xxxxxxxxx> --- wpa_supplicant/bss.c | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/wpa_supplicant/bss.c b/wpa_supplicant/bss.c index c679688108..0367413a61 100644 --- a/wpa_supplicant/bss.c +++ b/wpa_supplicant/bss.c @@ -1727,37 +1727,28 @@ static bool wpa_bss_validate_rsne_ml(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid, struct wpa_bss *bss, int *key_mgmt, int *rsne_type_p) { - struct ieee802_11_elems elems; struct wpa_ie_data wpa_ie; const u8 *rsne; - size_t rsne_len; int rsne_type; - const u8 *ies_pos = wpa_bss_ie_ptr(bss); - size_t ies_len = bss->ie_len ? bss->ie_len : bss->beacon_ie_len; - if (ieee802_11_parse_elems(ies_pos, ies_len, &elems, 0) == - ParseFailed) { - wpa_dbg(wpa_s, MSG_DEBUG, "MLD: Failed to parse elements"); + rsne = wpa_bss_get_rsne(wpa_s, bss, ssid, true); + if (!rsne || + wpa_parse_wpa_ie(rsne, 2 + rsne[1], &wpa_ie)) { + wpa_dbg(wpa_s, MSG_DEBUG, "MLD: No RSN element"); return false; } - if (elems.rsne_override_2 && wpas_rsn_overriding(wpa_s, ssid)) { - rsne = elems.rsne_override_2; - rsne_len = elems.rsne_override_2_len; - rsne_type = 2; - } else if (elems.rsne_override && wpas_rsn_overriding(wpa_s, ssid)) { - rsne = elems.rsne_override; - rsne_len = elems.rsne_override_len; + if (rsne[0] == WLAN_EID_RSN) { + rsne_type = 0; + } else if (rsne[0] == WLAN_EID_VENDOR_SPECIFIC && + WPA_GET_BE32(&rsne[2]) == RSNE_OVERRIDE_IE_VENDOR_TYPE) { rsne_type = 1; + } else if (rsne[0] == WLAN_EID_VENDOR_SPECIFIC && + WPA_GET_BE32(&rsne[2]) == RSNE_OVERRIDE_2_IE_VENDOR_TYPE) { + rsne_type = 2; } else { - rsne = elems.rsn_ie; - rsne_len = elems.rsn_ie_len; - rsne_type = 0; - } - - if (!rsne || - wpa_parse_wpa_ie(rsne - 2, 2 + rsne_len, &wpa_ie)) { - wpa_dbg(wpa_s, MSG_DEBUG, "MLD: No RSN element"); + wpa_dbg(wpa_s, MSG_ERROR, + "MLD: Unexpected RSN element type"); return false; } -- 2.50.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap