qcacmn: Handle mem leak when ipa_register_ready_cb() fails
Currently g_instances_added is not decremented correctly in scenarios where IPA callback fails. This prevents freeing the g_ipa_config memory during deinit, causing a memory leak. This change will ensure that the instance count is decremented correctly as part of deinit in both success and failure scenarios. Change-Id: I40fd14f6f441d1314eebf8c5d33616c824398a6f CRs-Fixed: 3472760
Tento commit je obsažen v:

odevzdal
Madan Koyyalamudi

rodič
2be2bf6a69
revize
e8dd9fd84a
@@ -4374,13 +4374,6 @@ QDF_STATUS wlan_ipa_cleanup(struct wlan_ipa_priv *ipa_ctx)
|
||||
|
||||
gp_ipa = NULL;
|
||||
|
||||
/* Acquire lock */
|
||||
ipa_init_deinit_lock();
|
||||
if (g_instances_added)
|
||||
g_instances_added--;
|
||||
/* Unlock */
|
||||
ipa_init_deinit_unlock();
|
||||
|
||||
ipa_ctx->handle_initialized = false;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
@@ -654,10 +654,14 @@ QDF_STATUS ipa_uc_ol_deinit(struct wlan_objmgr_pdev *pdev)
|
||||
|
||||
status = wlan_ipa_uc_ol_deinit(ipa_obj);
|
||||
ipa_obj_cleanup(ipa_obj);
|
||||
|
||||
out:
|
||||
if (g_instances_added)
|
||||
g_instances_added--;
|
||||
|
||||
if (!g_instances_added)
|
||||
ipa_disable_register_cb();
|
||||
|
||||
out:
|
||||
ipa_init_deinit_unlock();
|
||||
return status;
|
||||
}
|
||||
|
@@ -247,13 +247,6 @@ QDF_STATUS ipa_register_is_ipa_ready(struct wlan_objmgr_pdev *pdev)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/* Acquire lock */
|
||||
ipa_init_deinit_lock();
|
||||
g_instances_added++;
|
||||
ipa_info("No. of instances added for IPA is %d", g_instances_added);
|
||||
/* Unlock */
|
||||
ipa_init_deinit_unlock();
|
||||
|
||||
ret = qdf_ipa_register_ipa_ready_cb(ipa_register_ready_cb,
|
||||
(void *)ipa_obj);
|
||||
if (ret == -EEXIST) {
|
||||
@@ -263,6 +256,14 @@ QDF_STATUS ipa_register_is_ipa_ready(struct wlan_objmgr_pdev *pdev)
|
||||
ipa_err("Failed to check IPA readiness %d", ret);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/* Acquire lock */
|
||||
ipa_init_deinit_lock();
|
||||
g_instances_added++;
|
||||
ipa_info("No. of instances added for IPA is %d", g_instances_added);
|
||||
/* Unlock */
|
||||
ipa_init_deinit_unlock();
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele