Don't use default RSNE/RSNXE when the driver indicates cross SSID roaming
During cross SSID roaming wpa_supplicant ended up using the default RSNE/RSNXE in EAPOL-Key msg 2/4 though the driver indicated (Re)Association Request frame elements without RSNE/RSNXE. This causes RSNE/RSNXE mismatch between (Re)Association Request frame and EAPOL-Key msg 2/4. To avoid this skip copying the default RSNE/RSNXE if the driver indicates the actually used (Re)Association Request frame elements in the association event. Signed-off-by: Utkarsh Soni <quic_usoni@quicinc.com>
This commit is contained in:
parent
d7febe33f6
commit
b92f61885c
4 changed files with 39 additions and 20 deletions
|
@ -182,7 +182,8 @@ static void wpa_supplicant_update_link_bss(struct wpa_supplicant *wpa_s,
|
|||
}
|
||||
|
||||
|
||||
static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s)
|
||||
static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s,
|
||||
union wpa_event_data *data)
|
||||
{
|
||||
struct wpa_ssid *ssid, *old_ssid;
|
||||
u8 drv_ssid[SSID_MAX_LEN];
|
||||
|
@ -255,8 +256,15 @@ static int wpa_supplicant_select_config(struct wpa_supplicant *wpa_s)
|
|||
if (wpa_key_mgmt_wpa_any(ssid->key_mgmt)) {
|
||||
u8 wpa_ie[80];
|
||||
size_t wpa_ie_len = sizeof(wpa_ie);
|
||||
bool skip_default_rsne;
|
||||
|
||||
/* Do not override RSNE/RSNXE with the default values if the
|
||||
* driver indicated the actual values used in the
|
||||
* (Re)Association Request frame. */
|
||||
skip_default_rsne = data && data->assoc_info.req_ies;
|
||||
if (wpa_supplicant_set_suites(wpa_s, NULL, ssid,
|
||||
wpa_ie, &wpa_ie_len) < 0)
|
||||
wpa_ie, &wpa_ie_len,
|
||||
skip_default_rsne) < 0)
|
||||
wpa_dbg(wpa_s, MSG_DEBUG, "Could not set WPA suites");
|
||||
} else {
|
||||
wpa_supplicant_set_non_wpa_policy(wpa_s, ssid);
|
||||
|
@ -3557,7 +3565,7 @@ static void wpa_supplicant_event_assoc(struct wpa_supplicant *wpa_s,
|
|||
if (wpa_supplicant_dynamic_keys(wpa_s) && !ft_completed) {
|
||||
wpa_clear_keys(wpa_s, bssid);
|
||||
}
|
||||
if (wpa_supplicant_select_config(wpa_s) < 0) {
|
||||
if (wpa_supplicant_select_config(wpa_s, data) < 0) {
|
||||
wpa_supplicant_deauthenticate(
|
||||
wpa_s, WLAN_REASON_DEAUTH_LEAVING);
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue