wlan: Fix ULA Logic to remove EAPOL 4/4 race-condition.
Call ULA done callback from TL when it receives
EAPOL 4/4 packet. ULA done callback unblocks
set key to go through. Remove ULA logic from
SAP mode as it doesn't have race-condition.
Change-Id: Id5e08378019bb31f1829b257d32855a051ac4dcf
CRs-Fixed: 784553
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index b022c69..ac4083d 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -8356,21 +8356,6 @@
pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter);
if( pHostapdState->bssState == BSS_START )
{
- hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
- vos_status = wlan_hdd_check_ula_done(pAdapter);
-
- if ( vos_status != VOS_STATUS_SUCCESS )
- {
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "[%4d] wlan_hdd_check_ula_done returned ERROR status= %d",
- __LINE__, vos_status );
-
- pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE;
-
- status = -EINVAL;
- goto end;
- }
-
status = WLANSAP_SetKeySta( pVosContext, &setKey);
if ( status != eHAL_STATUS_SUCCESS )
@@ -8438,19 +8423,36 @@
setKey.peerMac[4], setKey.peerMac[5],
setKey.keyDirection);
- vos_status = wlan_hdd_check_ula_done(pAdapter);
-
- if ( vos_status != VOS_STATUS_SUCCESS )
+ /* Wait for EAPOL M4 before setting key.
+ * No need to consider Dynamic WEP as we will receive M8.
+ */
+ if ( (setKey.encType == eCSR_ENCRYPT_TYPE_AES ||
+ setKey.encType == eCSR_ENCRYPT_TYPE_TKIP) &&
+ ( 1
+#if defined WLAN_FEATURE_VOWIFI_11R
+ && pHddStaCtx->conn_info.authType != eCSR_AUTH_TYPE_FT_RSN
+ && pHddStaCtx->conn_info.authType != eCSR_AUTH_TYPE_FT_RSN_PSK
+#endif
+#ifdef FEATURE_WLAN_ESE
+ && pHddStaCtx->conn_info.authType != eCSR_AUTH_TYPE_CCKM_WPA
+ && pHddStaCtx->conn_info.authType != eCSR_AUTH_TYPE_CCKM_RSN
+#endif
+ ))
{
- VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+ vos_status = wlan_hdd_check_ula_done(pAdapter);
+
+ if ( vos_status != VOS_STATUS_SUCCESS )
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
"[%4d] wlan_hdd_check_ula_done returned ERROR status= %d",
__LINE__, vos_status );
- pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE;
+ pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE;
- status = -EINVAL;
- goto end;
+ status = -EINVAL;
+ goto end;
+ }
}
#ifdef WLAN_FEATURE_VOWIFI_11R