From fafb60d08c72ae19ba8f33d245f9f6477f07493d Mon Sep 17 00:00:00 2001 From: Wu Gao Date: Thu, 10 Dec 2020 22:04:47 +0800 Subject: [PATCH] qcacld-3.0: Release WLAN_TDLS_SB_ID when teardown TDLS connection It doesn't handle failed case about getting vdev or tdls vdev object when teardown tdls connection. Which causes reference count of psoc leak. Change-Id: Ie4e7966c0a07f378483cd5e6344599645c75ac68 CRs-Fixed: 2836949 --- components/tdls/core/src/wlan_tdls_ct.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/components/tdls/core/src/wlan_tdls_ct.c b/components/tdls/core/src/wlan_tdls_ct.c index 29a60701e8c6..8fd9b5d8aeec 100644 --- a/components/tdls/core/src/wlan_tdls_ct.c +++ b/components/tdls/core/src/wlan_tdls_ct.c @@ -1324,18 +1324,20 @@ void tdls_teardown_connections(struct tdls_link_teardown *tdls_teardown) tdls_vdev = tdls_get_vdev(tdls_teardown->psoc, WLAN_TDLS_SB_ID); if (!tdls_vdev) { tdls_err("Unable get the vdev"); - return; + goto fail_vdev; } tdls_vdev_obj = wlan_vdev_get_tdls_vdev_obj(tdls_vdev); if (!tdls_vdev_obj) { tdls_err("vdev priv is NULL"); - return; + goto fail_tdls_vdev; } tdls_disable_offchan_and_teardown_links(tdls_vdev); qdf_event_set(&tdls_vdev_obj->tdls_teardown_comp); +fail_tdls_vdev: wlan_objmgr_vdev_release_ref(tdls_vdev, WLAN_TDLS_SB_ID); +fail_vdev: wlan_objmgr_psoc_release_ref(tdls_teardown->psoc, WLAN_TDLS_SB_ID); qdf_mem_free(tdls_teardown); }