[PATCH 2/2] BSS: do proper fallback for RSNOE2/RSNOE/RSNE during MLD checking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux