Эх сурвалжийг харах

qcacld-3.0: Fix memory leaks for roam profile within csr session

Release roam profile within csr session before freeing actual profile.

Change-Id: I647570fe590d72752ae83eb37aa151fcc3ce659b
CRs-Fixed: 1116636
Naveen Rawat 8 жил өмнө
parent
commit
2096954450

+ 6 - 3
core/sme/src/common/sme_api.c

@@ -229,9 +229,12 @@ static QDF_STATUS sme_process_set_hw_mode_resp(tpAniSirGlobal mac, uint8_t *msg)
 		if (saved_cmd->u.scanCmd.u.scanRequest.SSIDs.SSIDList)
 			qdf_mem_free(saved_cmd->u.scanCmd.u.
 					scanRequest.SSIDs.SSIDList);
-		if (saved_cmd->u.scanCmd.pToRoamProfile)
-			qdf_mem_free(saved_cmd->u.scanCmd.
-					pToRoamProfile);
+		if (saved_cmd->u.scanCmd.pToRoamProfile) {
+			csr_release_profile(mac, saved_cmd->
+					    u.scanCmd.pToRoamProfile);
+			qdf_mem_free(saved_cmd->u.scanCmd.pToRoamProfile);
+			saved_cmd->u.scanCmd.pToRoamProfile = NULL;
+		}
 		if (saved_cmd) {
 			qdf_mem_free(saved_cmd);
 			saved_cmd = NULL;

+ 10 - 0
core/sme/src/csr/csr_api_roam.c

@@ -288,7 +288,17 @@ static void csr_roam_init_globals(tpAniSirGlobal pMac)
 
 static void csr_roam_de_init_globals(tpAniSirGlobal pMac)
 {
+	uint8_t i;
 	if (pMac) {
+		for (i = 0; i < CSR_ROAM_SESSION_MAX; i++) {
+			if (pMac->roam.roamSession[i].pCurRoamProfile)
+				csr_release_profile(pMac,
+						    pMac->roam.roamSession[i].
+						    pCurRoamProfile);
+			csr_release_profile(pMac,
+					    &pMac->roam.roamSession[i].
+					    stored_roam_profile.profile);
+		}
 		pMac->roam.roamSession = NULL;
 	}
 	return;

+ 4 - 1
core/sme/src/csr/csr_api_scan.c

@@ -4036,8 +4036,11 @@ error:
 		qdf_mem_free(save_cmd->u.roamCmd.pRoamBssEntry);
 	if (save_cmd->u.scanCmd.u.scanRequest.SSIDs.SSIDList)
 		qdf_mem_free(save_cmd->u.scanCmd.u.scanRequest.SSIDs.SSIDList);
-	if (save_cmd->u.scanCmd.pToRoamProfile)
+	if (save_cmd->u.scanCmd.pToRoamProfile) {
+		csr_release_profile(mac_ctx,
+				    save_cmd->u.scanCmd.pToRoamProfile);
 		qdf_mem_free(save_cmd->u.scanCmd.pToRoamProfile);
+	}
 
 	return QDF_STATUS_E_FAILURE;
 }