| From f16fdc9d2dc1e5b270e9a08377587e831e0d36ac Mon Sep 17 00:00:00 2001 |
| From: Amitkumar Karwar <akarwar@marvell.com> |
| Date: Mon, 6 May 2013 19:46:54 -0700 |
| Subject: mwifiex: fix memory leak issue when driver unload |
| |
| From: Amitkumar Karwar <akarwar@marvell.com> |
| |
| commit f16fdc9d2dc1e5b270e9a08377587e831e0d36ac upstream. |
| |
| After unregister_netdevice() call the request is queued and |
| reg_state is changed to NETREG_UNREGISTERING. |
| As we check for NETREG_UNREGISTERED state, free_netdev() never |
| gets executed causing memory leak. |
| |
| Initialize "dev->destructor" to free_netdev() to free device |
| data after unregistration. |
| |
| Reported-by: Daniel Drake <dsd@laptop.org> |
| Tested-by: Daniel Drake <dsd@laptop.org> |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/wireless/mwifiex/cfg80211.c | 3 --- |
| drivers/net/wireless/mwifiex/main.c | 1 + |
| 2 files changed, 1 insertion(+), 3 deletions(-) |
| |
| --- a/drivers/net/wireless/mwifiex/cfg80211.c |
| +++ b/drivers/net/wireless/mwifiex/cfg80211.c |
| @@ -2280,9 +2280,6 @@ int mwifiex_del_virtual_intf(struct wiph |
| if (wdev->netdev->reg_state == NETREG_REGISTERED) |
| unregister_netdevice(wdev->netdev); |
| |
| - if (wdev->netdev->reg_state == NETREG_UNREGISTERED) |
| - free_netdev(wdev->netdev); |
| - |
| /* Clear the priv in adapter */ |
| priv->netdev = NULL; |
| |
| --- a/drivers/net/wireless/mwifiex/main.c |
| +++ b/drivers/net/wireless/mwifiex/main.c |
| @@ -646,6 +646,7 @@ void mwifiex_init_priv_params(struct mwi |
| struct net_device *dev) |
| { |
| dev->netdev_ops = &mwifiex_netdev_ops; |
| + dev->destructor = free_netdev; |
| /* Initialize private structure */ |
| priv->current_key_index = 0; |
| priv->media_connected = false; |