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
This commit is contained in:
Abhishek Singh 2015-12-03 16:16:25 +05:30 • committed by Satish Singh
commit ac2be14ac2
2 changed files with 29 additions and 13 deletions

View file

@ -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) {

View file

@ -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)