[PATCH] libertas: fix error handling of card initialization
authorMarcelo Tosatti <mtosatti@redhat.com>
Fri, 25 May 2007 16:09:13 +0000 (12:09 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 11 Jun 2007 18:28:39 +0000 (14:28 -0400)
Subject says it all.

Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/libertas/if_usb.c
drivers/net/wireless/libertas/main.c

index 7ce57d4..d4db8e6 100644 (file)
@@ -198,10 +198,10 @@ static int if_usb_probe(struct usb_interface *intf,
                goto dealloc;
 
        if (wlan_add_mesh(priv))
-               goto dealloc;
+               goto err_add_mesh;
 
        if (libertas_activate_card(priv))
-               goto dealloc;
+               goto err_activate_card;
 
        if (libertas_found < MAX_DEVS) {
                libertas_devs[libertas_found] = priv->wlan_dev.netdev;
@@ -218,6 +218,12 @@ static int if_usb_probe(struct usb_interface *intf,
         */
        return 0;
 
+err_activate_card:
+       unregister_netdev(priv->mesh_dev);
+       free_netdev(priv->mesh_dev);
+err_add_mesh:
+       free_netdev(priv->wlan_dev.netdev);
+       kfree(priv->adapter);
 dealloc:
        if_usb_free(usb_cardp);
 
index 8990901..5c58c50 100644 (file)
@@ -823,6 +823,7 @@ wlan_private *wlan_add_card(void *card)
 
 err_kzalloc:
        free_netdev(dev);
+       priv = NULL;
 done:
        lbs_deb_leave_args(LBS_DEB_NET, "priv %p", priv);
        return priv;