brcmfmac: handle exceptions in brcmf_bus_start correct.
authorHante Meuleman <meuleman@broadcom.com>
Tue, 6 Nov 2012 00:22:15 +0000 (16:22 -0800)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 14 Nov 2012 19:55:46 +0000 (14:55 -0500)
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>
drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c

index b130f20bbcbdeeb810539ed824d9e3a3a934e8fb..9e2451f8e9e18b47e0f8a88e15246ff0416052df 100644 (file)
@@ -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;
        }