iwlagn: fix rmmod crash
authorStanislaw Gruszka <sgruszka@redhat.com>
Fri, 24 Jun 2011 09:34:34 +0000 (11:34 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 27 Jun 2011 19:09:42 +0000 (15:09 -0400)
priv->bus.bus_specific pointer is used after priv structures was freed,
in iwl_pci_remove(), what make ugly rmmod crash. This bug was introduced
by current pci changes.

On the way remove fake check, if prober error code is returned from
.probe() function, .remove() will never be called be null drvdata.

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-pci.c

index 3927c802a5d8f3f158ac0b1111bc964825e5635a..d582cc111456a3ae363af0fb6dffa5a694b22118 100644 (file)
@@ -496,14 +496,11 @@ static void iwl_pci_down(void *bus)
 static void __devexit iwl_pci_remove(struct pci_dev *pdev)
 {
        struct iwl_priv *priv = pci_get_drvdata(pdev);
-
-       /* This can happen if probe failed */
-       if (unlikely(!priv))
-               return;
+       void *bus_specific = priv->bus.bus_specific;
 
        iwl_remove(priv);
 
-       iwl_pci_down(IWL_BUS_GET_PCI_BUS(&priv->bus));
+       iwl_pci_down(bus_specific);
 }
 
 #ifdef CONFIG_PM