From: Hante Meuleman Date: Tue, 6 Nov 2012 00:22:15 +0000 (-0800) Subject: brcmfmac: handle exceptions in brcmf_bus_start correct. X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=6b028c5ee249fa974c9730ebcf227b7351eab39d;p=openwrt%2Fstaging%2Fblogic.git 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 Reviewed-by: Pieter-Paul Giesberts Signed-off-by: Hante Meuleman Signed-off-by: Franky Lin Signed-off-by: John W. Linville --- diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c b/drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c index b130f20bbcbd..9e2451f8e9e1 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; }