diff options
| author | Kapil Gupta <kapgupta@codeaurora.org> | 2016-08-09 18:43:46 +0530 |
|---|---|---|
| committer | qcabuildsw <qcabuildsw@localhost> | 2016-09-02 17:23:18 -0700 |
| commit | a7852cbd2f1e9732eef437387d5bfcc2f2787203 (patch) | |
| tree | 5fbac68bc72fdbb701301eb4e4f3de218e66a614 | |
| parent | e29ab4a9b09cbefd6acd8f0eced567d82f71c914 (diff) | |
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
| -rw-r--r-- | core/sap/dfs/src/dfs.c | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/core/sap/dfs/src/dfs.c b/core/sap/dfs/src/dfs.c index a2b5cff32ac1..e3fe339b9657 100644 --- a/core/sap/dfs/src/dfs.c +++ b/core/sap/dfs/src/dfs.c @@ -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; |
