Added changes to handle Legacy FT test cases.
1. Current checks included only SAE_FT AKM for state machine
handling.Added additional checks for legacy FT AKM's.
2. As part of GTK rekey, the keys generated in the DHD
post FT roam should be updated to the supplicant.
Added support for private command to fetch these keys
Bug: 187705876
Test: Validated on Android S slider
Signed-off-by: Mir Ali <mir-khizer.ali@broadcom.com>
Change-Id: I84499c1692538593b50b15cd53a7a9fd770f4f0c
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 9c4f9f5..01bbde6 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -2929,7 +2929,10 @@
}
#endif /* CONFIG_SME */
#ifdef CONFIG_DRIVER_NL80211_BRCM
- if ((wpa_s->key_mgmt == WPA_KEY_MGMT_FT_SAE) &&
+ if (((wpa_s->key_mgmt == WPA_KEY_MGMT_FT_PSK) ||
+ (wpa_s->key_mgmt == WPA_KEY_MGMT_FT_IEEE8021X) ||
+ (wpa_s->key_mgmt == WPA_KEY_MGMT_FT_SAE) ||
+ (wpa_s->key_mgmt == WPA_KEY_MGMT_FT_IEEE8021X_SHA384)) &&
wpa_ft_is_completed(wpa_s->wpa)) {
return 0;
}
@@ -3119,7 +3122,7 @@
/* Check for FT reassociation is done by the driver */
#ifdef CONFIG_IEEE80211R
int use_sha384 = wpa_key_mgmt_sha384(wpa_s->wpa->key_mgmt);
- if ((wpa_s->key_mgmt == WPA_KEY_MGMT_FT_SAE) && (wpa_s->key_mgmt == ie.key_mgmt)) {
+ if (wpa_key_mgmt_ft(wpa_s->key_mgmt) && (wpa_s->key_mgmt == ie.key_mgmt)) {
if (wpa_ft_parse_ies(data->assoc_info.resp_ies,
data->assoc_info.resp_ies_len, &parse, use_sha384) < 0) {
wpa_printf(MSG_DEBUG, "Failed to parse FT IEs");
@@ -3293,7 +3296,20 @@
*/
eapol_sm_notify_portValid(wpa_s->eapol, true);
}
-
+#ifdef CONFIG_DRIVER_NL80211_BRCM
+ if (ft_completed && wpa_key_mgmt_ft(wpa_s->key_mgmt)) {
+ if (wpa_drv_get_bssid(wpa_s, bssid) < 0) {
+ wpa_dbg(wpa_s, MSG_ERROR, "Failed to get BSSID, key_mgmt: 0x%0x",
+ wpa_s->key_mgmt);
+ wpa_supplicant_deauthenticate(
+ wpa_s, WLAN_REASON_DEAUTH_LEAVING);
+ return;
+ }
+ os_memcpy(wpa_s->bssid, bssid, ETH_ALEN);
+ wpa_s->assoc_freq = data->assoc_info.freq;
+ wpa_sm_notify_brcm_ft_reassoc(wpa_s->wpa, bssid);
+ }
+#endif /* CONFIG_DRIVER_NL80211_BRCM */
wpa_s->last_eapol_matches_bssid = 0;
#ifdef CONFIG_TESTING_OPTIONS
diff --git a/wpa_supplicant/wpas_glue.c b/wpa_supplicant/wpas_glue.c
index b1c606f..95dad95 100644
--- a/wpa_supplicant/wpas_glue.c
+++ b/wpa_supplicant/wpas_glue.c
@@ -308,9 +308,19 @@
ieee802_1x_notify_create_actor(wpa_s, wpa_s->last_eapol_src);
}
- if (result != EAPOL_SUPP_RESULT_SUCCESS ||
- !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X))
+#ifdef CONFIG_DRIVER_NL80211_BRCM
+ if (result != EAPOL_SUPP_RESULT_SUCCESS)
+#else
+ if (result != EAPOL_SUPP_RESULT_SUCCESS ||
+ !(wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X))
+#endif /* CONFIG_DRIVER_NL80211_BRCM */
+ return;
+
+#ifdef CONFIG_DRIVER_NL80211_BRCM
+ if (wpa_ft_is_ft_protocol(wpa_s->wpa)) {
return;
+ }
+#endif /* CONFIG_DRIVER_NL80211_BRCM */
if (!wpa_key_mgmt_wpa_ieee8021x(wpa_s->key_mgmt))
return;