Explorar o código

qcacld-3.0: Fix psoc ref count leak in wma_open

In wma_open, first get ref of psoc, then attach wmi, if attach
failed, should release ref of psoc before return

Change-Id: If2e21bbf8b54de865c2b54582685974474ea3c7c
CRs-Fixed: 2250872
Zhu Jianmin %!s(int64=6) %!d(string=hai) anos
pai
achega
f9e2e2d18f
Modificáronse 1 ficheiros con 3 adicións e 1 borrados
  1. 3 1
      core/wma/src/wma_main.c

+ 3 - 1
core/wma/src/wma_main.c

@@ -3114,7 +3114,7 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
 	qdf_status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_LEGACY_WMA_ID);
 	qdf_status = wlan_objmgr_psoc_try_get_ref(psoc, WLAN_LEGACY_WMA_ID);
 	if (QDF_IS_STATUS_ERROR(qdf_status)) {
 	if (QDF_IS_STATUS_ERROR(qdf_status)) {
 		WMA_LOGE("%s: PSOC get_ref fails", __func__);
 		WMA_LOGE("%s: PSOC get_ref fails", __func__);
-		goto err_wma_handle;
+		goto err_get_psoc_ref;
 	}
 	}
 	wma_handle->psoc = psoc;
 	wma_handle->psoc = psoc;
 
 
@@ -3585,6 +3585,8 @@ err_scn_context:
 
 
 err_wma_handle:
 err_wma_handle:
 	target_if_close();
 	target_if_close();
+	wlan_objmgr_psoc_release_ref(psoc, WLAN_LEGACY_WMA_ID);
+err_get_psoc_ref:
 	target_if_free_psoc_tgt_info(psoc);
 	target_if_free_psoc_tgt_info(psoc);
 	if (cds_get_conparam() != QDF_GLOBAL_FTM_MODE) {
 	if (cds_get_conparam() != QDF_GLOBAL_FTM_MODE) {
 #ifdef FEATURE_WLAN_EXTSCAN
 #ifdef FEATURE_WLAN_EXTSCAN