rsi: Fix memory leak in module unload
authorPrameela Rani Garnepudi <prameela.j04cs@gmail.com>
Thu, 13 Oct 2016 11:25:46 +0000 (16:55 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 17 Nov 2016 06:43:52 +0000 (08:43 +0200)
Observed crash when module is unloaded if CONFIG_RSI_DEBUGSFS is not set.
Fix: Debugfs entry removal moved inside CONFIG_RSI_DEBUGSFS flag in
             function rsi_mac80211_detach()
Memory leak found and fixed for below structures in function rsi_mac80211_detach()
* channel list for each supported band
* rsi debugfs info

Signed-off-by: Prameela Rani Garnepudi <prameela.j04cs@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/rsi/rsi_91x_mac80211.c

index dbb23899ddcb336827a3b0e5b255db9e16d2604d..58779c0fedd40679c8ed6846f90625bbeb803a7a 100644 (file)
@@ -194,6 +194,7 @@ static void rsi_register_rates_channels(struct rsi_hw *adapter, int band)
 void rsi_mac80211_detach(struct rsi_hw *adapter)
 {
        struct ieee80211_hw *hw = adapter->hw;
+       enum nl80211_band band;
 
        if (hw) {
                ieee80211_stop_queues(hw);
@@ -201,7 +202,17 @@ void rsi_mac80211_detach(struct rsi_hw *adapter)
                ieee80211_free_hw(hw);
        }
 
+       for (band = 0; band < NUM_NL80211_BANDS; band++) {
+               struct ieee80211_supported_band *sband =
+                                       &adapter->sbands[band];
+
+               kfree(sband->channels);
+       }
+
+#ifdef CONFIG_RSI_DEBUGFS
        rsi_remove_dbgfs(adapter);
+       kfree(adapter->dfsentry);
+#endif
 }
 EXPORT_SYMBOL_GPL(rsi_mac80211_detach);