]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
SAE: Use BSSID stored in ext_auth_bssid for set_pmk
authorSunil Dutt <usdutt@codeaurora.org>
Fri, 16 Aug 2019 05:08:10 +0000 (10:38 +0530)
committerJouni Malinen <j@w1.fi>
Fri, 16 Aug 2019 12:32:55 +0000 (15:32 +0300)
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 <jouni@codeaurora.org>
wpa_supplicant/sme.c

index 7944368cf8f9f533a8b4f13b8f975f562e306585..c98a541f2eaa4be2a5d26ace178f6973d6cc4f5d 100644 (file)
@@ -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 */