usb: musb: core: properly free host / device structs in err path
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Wed, 16 Oct 2013 10:50:06 +0000 (12:50 +0200)
committerFelipe Balbi <balbi@ti.com>
Thu, 17 Oct 2013 16:30:33 +0000 (11:30 -0500)
The patch fixes two issues in the error path cleanup:
- in MUSB_PORT_MODE_DUAL_ROLE mode, if musb_gadget_setup() fails we
  never cleanup the host struct earlier allocated.
- if musb_init_debugfs() or sysfs_create_group() fails, then we never
  free the host part initialization, only device part.

Cc: stable@vger.kernel.org # v3.11
Cc: Daniel Mack <zonque@gmail.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/musb/musb_core.c

index 5b4fa79a277ba83778431bc58b608a675352d291..6203ad38e913d8ab31b50c17b89d5447c5a57274 100644 (file)
@@ -1901,6 +1901,8 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
                if (status < 0)
                        goto fail3;
                status = musb_gadget_setup(musb);
+               if (status)
+                       musb_host_cleanup(musb);
                break;
        default:
                dev_err(dev, "unsupported port mode %d\n", musb->port_mode);
@@ -1927,6 +1929,7 @@ fail5:
 
 fail4:
        musb_gadget_cleanup(musb);
+       musb_host_cleanup(musb);
 
 fail3:
        if (musb->dma_controller)