wil6210: fix free'd memory access in wil_if_free()
authorVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Wed, 6 Aug 2014 07:31:59 +0000 (10:31 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 25 Aug 2014 20:17:37 +0000 (16:17 -0400)
In the wil_priv_deinit(), wdev->netdev is accessed, so free_netdev()
should not be called before mentioned call.

Set wdev->netdev to NULL Make sure no more attempts to use it.
It is used for debug printk if not NULL.

This fix kernel panic on module unload and in case error on probe;
if memory allocation debugging enabled.

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/wil6210/netdev.c

index d42fde903f0fb8ee93e129760cd53cd917238553..a44c2b61be0850803a66432fa1df3c2a9d1f792e 100644 (file)
@@ -168,11 +168,15 @@ void *wil_if_alloc(struct device *dev, void __iomem *csr)
 void wil_if_free(struct wil6210_priv *wil)
 {
        struct net_device *ndev = wil_to_ndev(wil);
+
        if (!ndev)
                return;
 
-       free_netdev(ndev);
        wil_priv_deinit(wil);
+
+       wil_to_ndev(wil) = NULL;
+       free_netdev(ndev);
+
        wil_wdev_free(wil);
 }