diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 7570d1215..66b69892b 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -5505,6 +5505,8 @@ static int wpa_driver_nl80211_try_connect( algs++; if (params->auth_alg & WPA_AUTH_ALG_FILS) algs++; + if (params->auth_alg & WPA_AUTH_ALG_FT) + algs++; if (algs > 1) { wpa_printf(MSG_DEBUG, " * Leave out Auth Type for automatic " "selection"); diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index c8f4802a9..dcd787bec 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -2725,16 +2725,26 @@ static u8 * wpas_populate_assoc_ies( const u8 *mdie = wpa_bss_get_ie(bss, WLAN_EID_MOBILITY_DOMAIN); if (mdie && mdie[1] >= MOBILITY_DOMAIN_ID_LEN) { + size_t len = 0; const u8 *md = mdie + 2; const u8 *wpa_md = wpa_sm_get_ft_md(wpa_s->wpa); if (os_memcmp(md, wpa_md, MOBILITY_DOMAIN_ID_LEN) == 0) { /* Add mobility domain IE */ - wpa_ie_len += wpa_ft_add_mdie( + len = wpa_ft_add_mdie( wpa_s->wpa, wpa_ie + wpa_ie_len, max_wpa_ie_len - wpa_ie_len, mdie); + wpa_ie_len += len; } +#ifdef CONFIG_SME + if (len > 0 && wpa_s->sme.ft_used && + wpa_sm_has_ptk(wpa_s->wpa)) { + wpa_dbg(wpa_s, MSG_DEBUG, + "SME: Trying to use FT over-the-air"); + algs |= WPA_AUTH_ALG_FT; + } +#endif /* CONFIG_SME */ } } #endif /* CONFIG_IEEE80211R */