summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStanislaw Gruszka <sgruszka@redhat.com>2011-06-24 11:34:34 +0200
committerJohn W. Linville <linville@tuxdriver.com>2011-06-27 21:09:42 +0200
commit428bc8c3960d2b18cb9f0d90cfe197ec9a822a54 (patch)
treed51512b45db9f5675a2f6b89a9a428781bece707
parentrt2x00: Fix unspeficied typo (diff)
downloadlinux-428bc8c3960d2b18cb9f0d90cfe197ec9a822a54.tar.xz
linux-428bc8c3960d2b18cb9f0d90cfe197ec9a822a54.zip
iwlagn: fix rmmod crash
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>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-pci.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-pci.c b/drivers/net/wireless/iwlwifi/iwl-pci.c
index 3927c802a5d8..d582cc111456 100644
--- a/drivers/net/wireless/iwlwifi/iwl-pci.c
+++ b/drivers/net/wireless/iwlwifi/iwl-pci.c
@@ -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