diff options
author | Amitkumar Karwar <akarwar@marvell.com> | 2013-11-14 22:10:40 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2013-11-15 14:29:31 -0500 |
commit | 98a4635bba7050afdbdce428cc44a0471779ffc5 (patch) | |
tree | 241dccc95a98c9d1f1d82941f79c1084904b3695 /drivers/net/wireless | |
parent | d1af2943da89f180274c846d593049e464026baf (diff) |
mwifiex: fix potential mem leak in .del_virtual_intf
1) Currently we freeing wdev for each interface in driver unload
path. We may leak memory if user have already deleted an interface.
mwifiex_add_virtual_intf() allocates wdev structure. So it should
be freed in mwifiex_del_virtual_intf().
This will make sure that wdev will be freed when user deletes an
interface and also in unload path.
2) "priv->netdev->ieee80211_ptr" should also be cleared in
mwifiex_del_virtual_intf.
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/mwifiex/cfg80211.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/main.c | 6 |
2 files changed, 3 insertions, 6 deletions
diff --git a/drivers/net/wireless/mwifiex/cfg80211.c b/drivers/net/wireless/mwifiex/cfg80211.c index ccc9c0866b25..aeaea0e3b4c4 100644 --- a/drivers/net/wireless/mwifiex/cfg80211.c +++ b/drivers/net/wireless/mwifiex/cfg80211.c | |||
@@ -2310,7 +2310,10 @@ int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev) | |||
2310 | unregister_netdevice(wdev->netdev); | 2310 | unregister_netdevice(wdev->netdev); |
2311 | 2311 | ||
2312 | /* Clear the priv in adapter */ | 2312 | /* Clear the priv in adapter */ |
2313 | priv->netdev->ieee80211_ptr = NULL; | ||
2313 | priv->netdev = NULL; | 2314 | priv->netdev = NULL; |
2315 | kfree(wdev); | ||
2316 | priv->wdev = NULL; | ||
2314 | 2317 | ||
2315 | priv->media_connected = false; | 2318 | priv->media_connected = false; |
2316 | 2319 | ||
diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c index 42d9a68f45de..78e8a6666cc6 100644 --- a/drivers/net/wireless/mwifiex/main.c +++ b/drivers/net/wireless/mwifiex/main.c | |||
@@ -998,12 +998,6 @@ int mwifiex_remove_card(struct mwifiex_adapter *adapter, struct semaphore *sem) | |||
998 | wiphy_unregister(priv->wdev->wiphy); | 998 | wiphy_unregister(priv->wdev->wiphy); |
999 | wiphy_free(priv->wdev->wiphy); | 999 | wiphy_free(priv->wdev->wiphy); |
1000 | 1000 | ||
1001 | for (i = 0; i < adapter->priv_num; i++) { | ||
1002 | priv = adapter->priv[i]; | ||
1003 | if (priv) | ||
1004 | kfree(priv->wdev); | ||
1005 | } | ||
1006 | |||
1007 | mwifiex_terminate_workqueue(adapter); | 1001 | mwifiex_terminate_workqueue(adapter); |
1008 | 1002 | ||
1009 | /* Unregister device */ | 1003 | /* Unregister device */ |