From b7cd64876df682bb424cd8eb6ab4ba46f6354fc0 Mon Sep 17 00:00:00 2001 From: Sunil Dutt Date: Fri, 16 Aug 2019 10:38:10 +0530 Subject: [PATCH] SAE: Use BSSID stored in ext_auth_bssid for set_pmk pending_bssid is cleared in the connected state and thus is not valid if SAE authentication is done to a new BSSID when in the connected state. Hence use the BSSID from ext_auth_bssid while configuring the PMK for the external authentication case. This is required for roaming to a new BSSID with driver-based-SME while the SAE processing happens with wpa_supplicant. Signed-off-by: Jouni Malinen --- wpa_supplicant/sme.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c index 7944368cf..c98a541f2 100644 --- a/wpa_supplicant/sme.c +++ b/wpa_supplicant/sme.c @@ -1197,12 +1197,12 @@ static int sme_sae_auth(struct wpa_supplicant *wpa_s, u16 auth_transaction, } -static int sme_sae_set_pmk(struct wpa_supplicant *wpa_s) +static int sme_sae_set_pmk(struct wpa_supplicant *wpa_s, const u8 *bssid) { wpa_printf(MSG_DEBUG, "SME: SAE completed - setting PMK for 4-way handshake"); wpa_sm_set_pmk(wpa_s->wpa, wpa_s->sme.sae.pmk, PMK_LEN, - wpa_s->sme.sae.pmkid, wpa_s->pending_bssid); + wpa_s->sme.sae.pmkid, bssid); if (wpa_s->conf->sae_pmkid_in_assoc) { /* Update the own RSNE contents now that we have set the PMK * and added a PMKSA cache entry based on the successfully @@ -1261,7 +1261,7 @@ void sme_external_auth_mgmt_rx(struct wpa_supplicant *wpa_s, if (res != 1) return; - if (sme_sae_set_pmk(wpa_s) < 0) + if (sme_sae_set_pmk(wpa_s, wpa_s->sme.ext_auth_bssid) < 0) return; } } @@ -1315,7 +1315,7 @@ void sme_event_auth(struct wpa_supplicant *wpa_s, union wpa_event_data *data) if (res != 1) return; - if (sme_sae_set_pmk(wpa_s) < 0) + if (sme_sae_set_pmk(wpa_s, wpa_s->pending_bssid) < 0) return; } #endif /* CONFIG_SAE */