dev->cmd_buf = kmalloc(PCAN_USB_MAX_CMD_LEN, GFP_KERNEL);
        if (!dev->cmd_buf) {
                err = -ENOMEM;
-               goto lbl_set_intf_data;
+               goto lbl_free_candev;
        }
 
        dev->udev = usb_dev;
        err = register_candev(netdev);
        if (err) {
                dev_err(&intf->dev, "couldn't register CAN device: %d\n", err);
-               goto lbl_free_cmd_buf;
+               goto lbl_restore_intf_data;
        }
 
        if (dev->prev_siblings)
        if (dev->adapter->dev_init) {
                err = dev->adapter->dev_init(dev);
                if (err)
-                       goto lbl_free_cmd_buf;
+                       goto lbl_unregister_candev;
        }
 
        /* set bus off */
        if (dev->adapter->dev_set_bus) {
                err = dev->adapter->dev_set_bus(dev, 0);
                if (err)
-                       goto lbl_free_cmd_buf;
+                       goto lbl_unregister_candev;
        }
 
        /* get device number early */
 
        return 0;
 
-lbl_free_cmd_buf:
-       kfree(dev->cmd_buf);
+lbl_unregister_candev:
+       unregister_candev(netdev);
 
-lbl_set_intf_data:
+lbl_restore_intf_data:
        usb_set_intfdata(intf, dev->prev_siblings);
+       kfree(dev->cmd_buf);
+
+lbl_free_candev:
        free_candev(netdev);
 
        return err;