mwl8k: don't return zero on failure paths in mwl8k_probe[_hw]()
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Fri, 18 Jan 2013 21:24:01 +0000 (01:24 +0400)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 22 Jan 2013 21:01:30 +0000 (16:01 -0500)
If pci_iomap() fails in mwl8k_probe(), it breaks off initialization,
deallocates all resources, but returns zero.
There is a similar issue when priv->rxd_ops is NULL in mwl8k_probe_hw().

The patch adds proper error code return values.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwl8k.c

index a9c0788..6835764 100644 (file)
@@ -5555,6 +5555,7 @@ static int mwl8k_probe_hw(struct ieee80211_hw *hw)
                if (priv->rxd_ops == NULL) {
                        wiphy_err(hw->wiphy,
                                  "Driver does not have AP firmware image support for this hardware\n");
+                       rc = -ENOENT;
                        goto err_stop_firmware;
                }
        } else {
@@ -5901,6 +5902,7 @@ static int mwl8k_probe(struct pci_dev *pdev,
        priv->sram = pci_iomap(pdev, 0, 0x10000);
        if (priv->sram == NULL) {
                wiphy_err(hw->wiphy, "Cannot map device SRAM\n");
+               rc = -EIO;
                goto err_iounmap;
        }
 
@@ -5913,6 +5915,7 @@ static int mwl8k_probe(struct pci_dev *pdev,
                priv->regs = pci_iomap(pdev, 2, 0x10000);
                if (priv->regs == NULL) {
                        wiphy_err(hw->wiphy, "Cannot map device registers\n");
+                       rc = -EIO;
                        goto err_iounmap;
                }
        }