"WPA: Failed to get random data for SNonce");
goto failed;
}
- if (sm->rsn_override != RSN_OVERRIDE_NOT_USED)
+ if (wpa_sm_rsn_overriding_supported(sm))
rsn_set_snonce_cookie(sm->snonce);
sm->renew_snonce = 0;
wpa_hexdump(MSG_DEBUG, "WPA: Renewed SNonce",
return -1;
}
- if (sm->proto == WPA_PROTO_RSN &&
- sm->rsn_override != RSN_OVERRIDE_NOT_USED) {
+ if (sm->proto == WPA_PROTO_RSN && wpa_sm_rsn_overriding_supported(sm)) {
if ((sm->ap_rsne_override && !ie->rsne_override) ||
(!sm->ap_rsne_override && ie->rsne_override) ||
(sm->ap_rsne_override && ie->rsne_override &&
goto fail;
}
- if (sm->rsn_override == RSN_OVERRIDE_NOT_USED)
+ if (!wpa_sm_rsn_overriding_supported(sm))
return 0;
if (rsn_override_link_kde) {
case WPA_PARAM_RSN_OVERRIDE:
sm->rsn_override = value;
break;
+ case WPA_PARAM_RSN_OVERRIDE_SUPPORT:
+ sm->rsn_override_support = value;
+ break;
default:
break;
}
}
+bool wpa_sm_rsn_overriding_supported(struct wpa_sm *sm)
+{
+ const u8 *rsne;
+ size_t rsne_len;
+
+ rsne = wpa_sm_get_ap_rsne(sm, &rsne_len);
+
+ return sm->rsn_override_support && rsne;
+}
+
+
int wpa_sm_ext_key_id(struct wpa_sm *sm)
{
return sm ? sm->ext_key_id : 0;
bool driver_bss_selection;
bool ft_prepend_pmkid;
+ bool rsn_override_support;
enum wpa_rsn_override rsn_override;
};
void wpa_tdls_assoc(struct wpa_sm *sm);
void wpa_tdls_disassoc(struct wpa_sm *sm);
+bool wpa_sm_rsn_overriding_supported(struct wpa_sm *sm);
#endif /* WPA_I_H */
wpa_s->sme.assoc_req_ie_len += multi_ap_ie_len;
}
+ wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_RSN_OVERRIDE_SUPPORT,
+ wpas_rsn_overriding(wpa_s));
wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_RSN_OVERRIDE,
RSN_OVERRIDE_NOT_USED);
if (wpas_rsn_overriding(wpa_s) &&
wpa_ie_len += multi_ap_ie_len;
}
+ wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_RSN_OVERRIDE_SUPPORT,
+ wpas_rsn_overriding(wpa_s));
wpa_sm_set_param(wpa_s->wpa, WPA_PARAM_RSN_OVERRIDE,
RSN_OVERRIDE_NOT_USED);
if (wpas_rsn_overriding(wpa_s) &&