summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHante Meuleman <meuleman@broadcom.com>2012-11-05 16:22:15 -0800
committerJohn W. Linville <linville@tuxdriver.com>2012-11-14 14:55:46 -0500
commit6b028c5ee249fa974c9730ebcf227b7351eab39d (patch)
tree24f7294f0a6d8c29a69baeb1bfab657f2ae13cf9
parentdb22ae8cd282489c5322eaa09d30bd7481ed7104 (diff)
brcmfmac: handle exceptions in brcmf_bus_start correct.
On exception during brcmf_bus_start the netdev should be freed, if already allocated. Reviewed-by: Arend Van Spriel <arend@broadcom.com> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com> Signed-off-by: Hante Meuleman <meuleman@broadcom.com> Signed-off-by: Franky Lin <frankyl@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
index b130f20bbcb..9e2451f8e9e 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c
@@ -708,7 +708,6 @@ int brcmf_net_attach(struct brcmf_if *ifp)
fail:
ndev->netdev_ops = NULL;
- free_netdev(ndev);
return -EBADE;
}
@@ -858,15 +857,21 @@ int brcmf_bus_start(struct device *dev)
/* Bus is ready, do any initialization */
ret = brcmf_c_preinit_dcmds(ifp);
if (ret < 0)
- return ret;
+ goto fail;
drvr->config = brcmf_cfg80211_attach(drvr);
- if (drvr->config == NULL)
- return -ENOMEM;
+ if (drvr->config == NULL) {
+ ret = -ENOMEM;
+ goto fail;
+ }
ret = brcmf_net_attach(ifp);
+fail:
if (ret < 0) {
brcmf_dbg(ERROR, "brcmf_net_attach failed");
+ if (drvr->config)
+ brcmf_cfg80211_detach(drvr->config);
+ free_netdev(drvr->iflist[0]->ndev);
drvr->iflist[0] = NULL;
return ret;
}