summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaveen Rawat <naveenrawat@codeaurora.org>2016-06-27 15:31:48 -0700
committerNandini Suresh <snandini@codeaurora.org>2016-06-30 11:06:16 -0700
commit7ecf53d0ae7129df232d1e52af02846a031d8953 (patch)
treef5fce97cafe548a7ade035ff60147e6f47cc85d0
parentcf684760d68de5535ebdc6b53abf4fd0aa18030a (diff)
qcacld-3.0: Add for NULL pointer check in sme/csr functions
Check for NULL pointer before accessing pointers in function: * csr_roam_join_handle_profile * csr_roam_process_results_default * csr_roam_process_start_bss_success * csr_roam_process_join_res * csr_process_nss_update_req * csr_is_p2p_session_connected Change-Id: I9bf83a2641a4523713b9180679648202ea9c9eef CRs-Fixed: 1034255
-rw-r--r--core/sme/src/csr/csr_api_roam.c55
1 files changed, 40 insertions, 15 deletions
diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c
index 16e56c4b4dfd..81ca42cf48a7 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -5019,15 +5019,22 @@ static void csr_roam_join_handle_profile(tpAniSirGlobal mac_ctx,
uint8_t acm_mask = 0;
#endif
QDF_STATUS status;
- tCsrRoamSession *session = CSR_GET_SESSION(mac_ctx, session_id);
+ tCsrRoamSession *session;
tCsrRoamProfile *profile = &cmd->u.roamCmd.roamProfile;
tDot11fBeaconIEs *ies_local = NULL;
+
+ if (!CSR_IS_SESSION_VALID(mac_ctx, session_id)) {
+ sms_log(mac_ctx, LOGE, FL("Invalid session id %d"), session_id);
+ return;
+ }
+ session = CSR_GET_SESSION(mac_ctx, session_id);
+
/*
* We have something to roam, tell HDD when it is infra.
* For IBSS, the indication goes back to HDD via eCSR_ROAM_IBSS_IND
*/
- if (CSR_IS_INFRASTRUCTURE(profile)) {
- if (roam_info_ptr && session->bRefAssocStartCnt) {
+ if (CSR_IS_INFRASTRUCTURE(profile) && roam_info_ptr) {
+ if (session->bRefAssocStartCnt) {
session->bRefAssocStartCnt--;
roam_info_ptr->pProfile = profile;
/*
@@ -6052,10 +6059,16 @@ static void csr_roam_process_results_default(tpAniSirGlobal mac_ctx,
tSmeCmd *cmd, void *context, eCsrRoamCompleteResult res)
{
uint32_t session_id = cmd->sessionId;
- tCsrRoamSession *session = CSR_GET_SESSION(mac_ctx, session_id);
+ tCsrRoamSession *session;
tCsrRoamInfo roam_info;
QDF_STATUS status;
+ if (!CSR_IS_SESSION_VALID(mac_ctx, session_id)) {
+ sms_log(mac_ctx, LOGE, FL("Invalid session id %d"), session_id);
+ return;
+ }
+ session = CSR_GET_SESSION(mac_ctx, session_id);
+
sms_log(mac_ctx, LOGW, FL("receives no association indication"));
sms_log(mac_ctx, LOG1, FL("Assoc ref count %d"),
session->bRefAssocStartCnt);
@@ -6252,7 +6265,7 @@ static void csr_roam_process_start_bss_success(tpAniSirGlobal mac_ctx,
{
uint32_t session_id = cmd->sessionId;
tCsrRoamProfile *profile = &cmd->u.roamCmd.roamProfile;
- tCsrRoamSession *session = CSR_GET_SESSION(mac_ctx, session_id);
+ tCsrRoamSession *session;
tSirBssDescription *bss_desc = NULL;
tCsrRoamInfo roam_info;
tSirSmeStartBssRsp *start_bss_rsp = NULL;
@@ -6269,6 +6282,12 @@ static void csr_roam_process_start_bss_success(tpAniSirGlobal mac_ctx,
tCsrRoamHTProfile *dst_profile = NULL;
#endif
+ if (!CSR_IS_SESSION_VALID(mac_ctx, session_id)) {
+ sms_log(mac_ctx, LOGE, FL("Invalid session id %d"), session_id);
+ return;
+ }
+ session = CSR_GET_SESSION(mac_ctx, session_id);
+
/*
* on the StartBss Response, LIM is returning the Bss Description that
* we are beaconing. Add this Bss Description to our scan results and
@@ -6460,7 +6479,7 @@ static void csr_roam_process_join_res(tpAniSirGlobal mac_ctx,
uint8_t acm_mask = 0; /* HDD needs ACM mask in assoc rsp callback */
uint32_t session_id = cmd->sessionId;
tCsrRoamProfile *profile = &cmd->u.roamCmd.roamProfile;
- tCsrRoamSession *session = CSR_GET_SESSION(mac_ctx, session_id);
+ tCsrRoamSession *session;
tSirBssDescription *bss_desc = NULL;
tCsrScanResult *scan_res = NULL;
sme_qos_csr_event_indType ind_qos;
@@ -6475,6 +6494,12 @@ static void csr_roam_process_join_res(tpAniSirGlobal mac_ctx,
tSirSmeJoinRsp *join_rsp = (tSirSmeJoinRsp *) context;
uint32_t len;
+ if (!CSR_IS_SESSION_VALID(mac_ctx, session_id)) {
+ sms_log(mac_ctx, LOGE, FL("Invalid session id %d"), session_id);
+ return;
+ }
+ session = CSR_GET_SESSION(mac_ctx, session_id);
+
conn_profile = &session->connectedProfile;
if (eCsrReassocSuccess == res)
ind_qos = SME_QOS_CSR_REASSOC_COMPLETE;
@@ -18747,19 +18772,19 @@ void csr_process_nss_update_req(tpAniSirGlobal mac, tSmeCmd *command)
QDF_STATUS status;
tSirMsgQ msg_return;
struct sir_beacon_tx_complete_rsp *param;
-
- tCsrRoamSession *session =
- CSR_GET_SESSION(mac, command->sessionId);
-
- if (!session) {
- sms_log(mac, LOGE, FL("Session not found"));
- goto fail;
- }
+ tCsrRoamSession *session;
if (!command) {
sms_log(mac, LOGE, FL("nss update param is NULL"));
- goto fail;
+ return;
+ }
+
+ if (!CSR_IS_SESSION_VALID(mac, command->sessionId)) {
+ sms_log(mac, LOGE, FL("Invalid session id %d"),
+ command->sessionId);
+ return;
}
+ session = CSR_GET_SESSION(mac, command->sessionId);
len = sizeof(*msg);
msg = qdf_mem_malloc(len);