summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtl818x
diff options
context:
space:
mode:
authorAndrea Merello <andrea.merello@gmail.com>2014-06-30 18:19:40 +0200
committerJohn W. Linville <linville@tuxdriver.com>2014-07-01 20:26:27 +0200
commitc1084e026b4fe73fcc54f82d6a6bd26d9372d583 (patch)
tree4bab27c11b5136065d4ba6ba9e353fc147e9b5a6 /drivers/net/wireless/rtl818x
parentrtl818x_pci: handle broken PIO mapping (diff)
downloadlinux-c1084e026b4fe73fcc54f82d6a6bd26d9372d583.tar.xz
linux-c1084e026b4fe73fcc54f82d6a6bd26d9372d583.zip
rtl818x_pci: fix pci probe returns success when it fails
There are several exit path from the PCI probe function. Some of them, that are taken in case of errors, forget to set the "err" variable, that is returned by the probe function. This can lead to the kernel thinking the probe function succeeds while it didn't, and this in turn causes extra calls to the "remove" function. This patch fix this problem by ensuring "err" variable is assigned to a proper non-zero value in each exit path. Signed-off-by: Andrea Merello <andrea.merello@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rtl818x')
-rw-r--r--drivers/net/wireless/rtl818x/rtl8180/dev.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/wireless/rtl818x/rtl8180/dev.c b/drivers/net/wireless/rtl818x/rtl8180/dev.c
index 68304a9297fd..4b904f708184 100644
--- a/drivers/net/wireless/rtl818x/rtl8180/dev.c
+++ b/drivers/net/wireless/rtl818x/rtl8180/dev.c
@@ -1756,6 +1756,7 @@ static int rtl8180_probe(struct pci_dev *pdev,
if (!priv->map) {
dev_err(&pdev->dev, "Cannot map device memory/PIO\n");
+ err = -ENOMEM;
goto err_free_dev;
}
@@ -1816,6 +1817,7 @@ static int rtl8180_probe(struct pci_dev *pdev,
default:
printk(KERN_ERR "%s (rtl8180): Unknown chip! (0x%x)\n",
pci_name(pdev), reg >> 25);
+ err = -ENODEV;
goto err_iounmap;
}
@@ -1866,12 +1868,14 @@ static int rtl8180_probe(struct pci_dev *pdev,
default:
printk(KERN_ERR "%s (rtl8180): Unknown RF! (0x%x)\n",
pci_name(pdev), priv->rf_type);
+ err = -ENODEV;
goto err_iounmap;
}
if (!priv->rf) {
printk(KERN_ERR "%s (rtl8180): %s RF frontend not supported!\n",
pci_name(pdev), rf_name);
+ err = -ENODEV;
goto err_iounmap;
}