qcacld-3.0: Fix memory leak issue
qcacld-2.0 to qcacld-3.0 propagation Memory allocated for dfs filters in dfs_attach() API does not get freed in failure case. Add changes to fix memory leak issue. Change-Id: Icdd4a382685471c0d3cf8115cec30fcb307eedfb CRs-Fixed: 1038603
This commit is contained in:
@@ -253,6 +253,24 @@ error:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* dfs_free_filter() - free memory allocated for dfs ft_filters
|
||||
* @radarf: pointer holding ft_filters
|
||||
*
|
||||
* Return: NA
|
||||
*/
|
||||
static void dfs_free_filter(struct dfs_filtertype *radarf)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < DFS_MAX_NUM_RADAR_FILTERS; i++) {
|
||||
if (radarf->ft_filters[i]) {
|
||||
qdf_mem_free(radarf->ft_filters[i]);
|
||||
radarf->ft_filters[i] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int dfs_attach(struct ieee80211com *ic)
|
||||
{
|
||||
int i, n;
|
||||
@@ -440,11 +458,20 @@ int dfs_attach(struct ieee80211com *ic)
|
||||
return 0;
|
||||
|
||||
bad2:
|
||||
OS_FREE(dfs->dfs_radartable);
|
||||
dfs->dfs_radartable = NULL;
|
||||
if (dfs->dfs_radartable != NULL) {
|
||||
for (n = 0; n < 256; n++) {
|
||||
if (dfs->dfs_radartable[n] != NULL) {
|
||||
OS_FREE(dfs->dfs_radartable[n]);
|
||||
dfs->dfs_radartable[n] = NULL;
|
||||
}
|
||||
}
|
||||
OS_FREE(dfs->dfs_radartable);
|
||||
dfs->dfs_radartable = NULL;
|
||||
}
|
||||
bad1:
|
||||
for (n = 0; n < DFS_MAX_RADAR_TYPES; n++) {
|
||||
if (dfs->dfs_radarf[n] != NULL) {
|
||||
dfs_free_filter(dfs->dfs_radarf[n]);
|
||||
OS_FREE(dfs->dfs_radarf[n]);
|
||||
dfs->dfs_radarf[n] = NULL;
|
||||
}
|
||||
@@ -471,23 +498,6 @@ bad1:
|
||||
#undef N
|
||||
}
|
||||
|
||||
/**
|
||||
* dfs_free_filter() - free memory allocated for dfs ft_filters
|
||||
* @radarf: pointer holding ft_filters
|
||||
*
|
||||
* Return: NA
|
||||
*/
|
||||
static void dfs_free_filter(struct dfs_filtertype *radarf)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < DFS_MAX_NUM_RADAR_FILTERS; i++) {
|
||||
if (radarf->ft_filters[i]) {
|
||||
qdf_mem_free(radarf->ft_filters[i]);
|
||||
radarf->ft_filters[i] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
void dfs_detach(struct ieee80211com *ic)
|
||||
{
|
||||
struct ath_dfs *dfs = (struct ath_dfs *)ic->ic_dfs;
|
||||
|
Reference in New Issue
Block a user