Bladeren bron

qcacld-3.0: Update the status code in Re/assoc rsp for failure

qcacld-2.0 to qcacld-3.0 propagation

If deauth is received just after Assoc rsp from AP in addSTA
response Re/assoc confirm is sent with status failure.
But protStatusCode in assoc confirm is not updated and thus the
pRoamInfo->reasonCode may have garbage value.
In case of Wep connection failure reason code,
pRoamInfo->reasonCode, is sent to the supplicant in connect
result. Now if pRoamInfo->reasonCode is 0 supplicant receives
connection success though connection have actually failed.

To avoid this update protStatusCode, before sending Re/assoc
failure.
Also properly derive if connection is WEP from roamProfile before
clearing it.

CRs-Fixed: 926572
Change-Id: I5ae0832d37746be16696f521bddd5b67307b1ee4
Abhishek Singh 9 jaren geleden
bovenliggende
commit
ac2be14ac2
2 gewijzigde bestanden met toevoegingen van 29 en 13 verwijderingen
  1. 25 13
      core/hdd/src/wlan_hdd_assoc.c
  2. 4 0
      core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c

+ 25 - 13
core/hdd/src/wlan_hdd_assoc.c

@@ -2053,7 +2053,7 @@ defined(FEATURE_WLAN_LFR)
 						hddLog(LOG1,
 						       FL("sending connect indication to nl80211:for bssid "
 						       MAC_ADDRESS_STR
-						       " reason:%d and Status:%d"),
+						       " result:%d and Status:%d"),
 						       MAC_ADDR_ARRAY
 							       (pRoamInfo->bssid.bytes),
 						       roamResult, roamStatus);
@@ -2185,12 +2185,12 @@ defined(FEATURE_WLAN_LFR)
 			WLAN_HDD_GET_WEXT_STATE_PTR(pAdapter);
 		if (pRoamInfo)
 			pr_info("wlan: connection failed with " MAC_ADDRESS_STR
-				" reason:%d and Status:%d\n",
+				" result:%d and Status:%d\n",
 				MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes),
 				roamResult, roamStatus);
 		else
 			pr_info("wlan: connection failed with " MAC_ADDRESS_STR
-				" reason:%d and Status:%d\n",
+				" result:%d and Status:%d\n",
 				MAC_ADDR_ARRAY(pWextState->req_bssId.bytes),
 				roamResult, roamStatus);
 
@@ -2204,19 +2204,18 @@ defined(FEATURE_WLAN_LFR)
 				hddLog(LOGE,
 				       FL("send connect failure to nl80211: for bssid "
 				       MAC_ADDRESS_STR
-				       " reason:%d and Status:%d "),
+				       " result:%d and Status:%d reasoncode %d"),
 				       MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes),
-				       roamResult, roamStatus);
+				       roamResult, roamStatus,
+				       pRoamInfo->reasonCode);
 			else
 				hddLog(LOGE,
 				       FL("connect failed: for bssid "
 				       MAC_ADDRESS_STR
-				       " reason:%d and Status:%d "),
+				       " result:%d and Status:%d "),
 				       MAC_ADDR_ARRAY(pWextState->req_bssId.bytes),
 				       roamResult, roamStatus);
 
-			hdd_clear_roam_profile_ie(pAdapter);
-
 			/* inform association failure event to nl80211 */
 			if (eCSR_ROAM_RESULT_ASSOC_FAIL_CON_CHANNEL ==
 			    roamResult) {
@@ -2237,12 +2236,22 @@ defined(FEATURE_WLAN_LFR)
 					eCsrAuthType authType =
 						pWextState->roamProfile.AuthType.
 						authType[0];
+					eCsrEncryptionType encryption_type =
+						pWextState->roamProfile.
+						EncryptionType.encryptionType[0];
 					bool isWep =
+						(((authType ==
+						eCSR_AUTH_TYPE_OPEN_SYSTEM) ||
 						(authType ==
-						 eCSR_AUTH_TYPE_OPEN_SYSTEM)
-						|| (authType ==
-						    eCSR_AUTH_TYPE_SHARED_KEY);
-
+						eCSR_AUTH_TYPE_SHARED_KEY)) &&
+						((encryption_type ==
+						eCSR_ENCRYPT_TYPE_WEP40) ||
+						(encryption_type ==
+						eCSR_ENCRYPT_TYPE_WEP104) ||
+						(encryption_type ==
+						eCSR_ENCRYPT_TYPE_WEP40_STATICKEY) ||
+						(encryption_type ==
+						eCSR_ENCRYPT_TYPE_WEP104_STATICKEY)));
 					/*
 					 * In case of OPEN-WEP or SHARED-WEP
 					 * authentication, send exact protocol
@@ -2253,7 +2262,9 @@ defined(FEATURE_WLAN_LFR)
 					cfg80211_connect_result(dev,
 						pRoamInfo->bssid.bytes, NULL, 0,
 						NULL, 0,
-						isWep ? pRoamInfo->reasonCode :
+						(isWep &&
+						 pRoamInfo->reasonCode) ?
+						pRoamInfo->reasonCode :
 						WLAN_STATUS_UNSPECIFIED_FAILURE,
 						GFP_KERNEL);
 				} else
@@ -2263,6 +2274,7 @@ defined(FEATURE_WLAN_LFR)
 						WLAN_STATUS_UNSPECIFIED_FAILURE,
 						GFP_KERNEL);
 			}
+			hdd_clear_roam_profile_ie(pAdapter);
 		}
 
 		if (pRoamInfo) {

+ 4 - 0
core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c

@@ -1722,6 +1722,8 @@ void lim_process_sta_mlm_add_sta_rsp(tpAniSirGlobal mac_ctx,
 			 */
 			mlm_assoc_cnf.resultCode =
 				eSIR_SME_JOIN_DEAUTH_FROM_AP_DURING_ADD_STA;
+			mlm_assoc_cnf.protStatusCode =
+					   eSIR_MAC_UNSPEC_FAILURE_STATUS;
 			session_entry->staId = add_sta_params->staIdx;
 			goto end;
 		}
@@ -1805,6 +1807,7 @@ void lim_process_sta_mlm_add_sta_rsp(tpAniSirGlobal mac_ctx,
 		else
 			mlm_assoc_cnf.resultCode =
 				(tSirResultCodes) eSIR_SME_REFUSED;
+		mlm_assoc_cnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
 	}
 end:
 	if (NULL != msg->bodyptr) {
@@ -3044,6 +3047,7 @@ lim_process_sta_mlm_add_bss_rsp(tpAniSirGlobal mac_ctx,
 	} else {
 		lim_log(mac_ctx, LOGP, FL("SessionId:%d ADD_BSS failed!"),
 			session_entry->peSessionId);
+		mlm_assoc_cnf.protStatusCode = eSIR_MAC_UNSPEC_FAILURE_STATUS;
 		/* Return Assoc confirm to SME with failure */
 		if (eLIM_MLM_WT_ADD_BSS_RSP_FT_REASSOC_STATE ==
 				session_entry->limMlmState)