@@ -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;
}