staging: brcm80211: bugfix for stack dump on firmware load problems
authorRoland Vossen <rvossen@broadcom.com>
Tue, 15 Feb 2011 10:13:51 +0000 (11:13 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 18 Feb 2011 21:04:55 +0000 (13:04 -0800)
If there is a problem with the firmware load (eg, firmware not present in
/lib/firmware/brcm), then the driver would dump its stack instead of bailing
out gracefully. Root cause was an uninitialized variable (wl->pub) being
dereferenced in the rfkill portion of a cleanup routine (wl_remove). Fix was
to move the rfkill calls into the correct spot in wl_remove().

Signed-off-by: Roland Vossen <rvossen@broadcom.com>
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/brcm80211/brcmsmac/wl_mac80211.c

index bf98a15..20afb13 100644 (file)
@@ -1206,15 +1206,13 @@ static void wl_remove(struct pci_dev *pdev)
                return;
        }
 
-       /* make sure rfkill is not using driver */
-       wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, false);
-       wiphy_rfkill_stop_polling(wl->pub->ieee_hw->wiphy);
-
        if (!wlc_chipmatch(pdev->vendor, pdev->device)) {
                WL_ERROR("wl: wl_remove: wlc_chipmatch failed\n");
                return;
        }
        if (wl->wlc) {
+               wiphy_rfkill_set_hw_state(wl->pub->ieee_hw->wiphy, false);
+               wiphy_rfkill_stop_polling(wl->pub->ieee_hw->wiphy);
                ieee80211_unregister_hw(hw);
                WL_LOCK(wl);
                wl_down(wl);