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:
Namita Nair
2023-04-19 17:08:09 -07:00
odevzdal Madan Koyyalamudi
rodič 2be2bf6a69
revize e8dd9fd84a
3 změnil soubory, kde provedl 13 přidání a 15 odebrání

Zobrazit soubor

@@ -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;

Zobrazit soubor

@@ -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;
}

Zobrazit soubor

@@ -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;
}