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:
Kapil Gupta
2016-08-09 18:43:46 +05:30
committed by qcabuildsw
父節點 e29ab4a9b0
當前提交 a7852cbd2f

查看文件

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