[PATCH 2/2] BSS: do proper fallback for RSNOE2/RSNOE/RSNE during MLD checking
Benjamin Berg
benjamin at sipsolutions.net
Thu Jul 31 03:56:21 PDT 2025
From: Benjamin Berg <benjamin.berg at intel.com>
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 at intel.com>
---
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
More information about the Hostap
mailing list