linux/drivers/usb/gadget/udc
Alan Stern afd7fd81f2 USB: Gadget core: fix inconsistency in the interface tousb_add_gadget_udc_release()
The usb_add_gadget_udc_release() routine in the USB gadget core will
sometimes but not always call the gadget's release function when an
error occurs.  More specifically, if the struct usb_udc allocation
fails then the release function is not called, and for other errors it
is.

As a result, users of this routine cannot know whether they need to
deallocate the memory containing the gadget structure following an
error.  This leads to unavoidable memory leaks or double frees.

This patch fixes the problem by splitting the existing
device_register() call into device_initialize() and device_add(), and
doing the udc allocation in between.  That way, even if the allocation
fails it is still possible to call device_del(), and so the release
function will be always called following an error.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
2017-08-18 10:26:13 +03:00
..
bdc usb: bdc: Add support for USB phy 2017-08-15 14:18:59 +03:00
amd5536udc_pci.c usb: gadget: udc: make debug prints compatible with both pci and platform devices 2017-06-13 13:21:01 +03:00
amd5536udc.h usb: gadget: udc: Add Synopsys UDC Platform driver 2017-06-13 13:21:03 +03:00
at91_udc.c usb: gadget: udc: at91: use PTR_ERR_OR_ZERO() 2016-04-14 09:24:38 +03:00
at91_udc.h usb: Convert pr_warning to pr_warn 2016-11-03 10:38:36 +02:00
atmel_usba_udc.c usb: gadget: udc: atmel: Remove unnecessary macros 2017-06-19 09:22:45 +03:00
atmel_usba_udc.h usb: gadget: udc: atmel: Remove unnecessary macros 2017-06-19 09:22:45 +03:00
bcm63xx_udc.c treewide: remove redundant #include <linux/kconfig.h> 2016-10-11 15:06:33 -07:00
core.c USB: Gadget core: fix inconsistency in the interface tousb_add_gadget_udc_release() 2017-08-18 10:26:13 +03:00
dummy_hcd.c usb: gadget: dummy: fix infinite loop because of missing loop decrement 2017-08-15 12:46:04 +03:00
fotg210-udc.c usb: gadget: udc: constify usb_ep_ops structures 2017-01-24 11:04:24 +02:00
fotg210.h
fsl_mxc_udc.c
fsl_qe_udc.c usb: gadget: fsl_qe_udc: constify qe_ep0_desc 2017-08-15 12:46:02 +03:00
fsl_qe_udc.h
fsl_udc_core.c fsl_udc_core: add support for devices provided by fsl-mph-dr-of 2017-04-11 10:58:27 +03:00
fsl_usb2_udc.h usb: Convert pr_warning to pr_warn 2016-11-03 10:38:36 +02:00
fusb300_udc.c usb: gadget: udc: constify usb_ep_ops structures 2017-01-24 11:04:24 +02:00
fusb300_udc.h
goku_udc.c usb: gadget: udc: constify usb_ep_ops structures 2017-01-24 11:04:24 +02:00
goku_udc.h
gr_udc.c usb: gadget: udc: constify usb_ep_ops structures 2017-01-24 11:04:24 +02:00
gr_udc.h
Kconfig usb: gadget: udc: USB_SNP_CORE should depend on HAS_DMA 2017-07-17 11:00:26 +03:00
lpc32xx_udc.c usb: udc: lpc32xx: remove USB PLL and USB OTG clock management 2016-03-04 15:14:49 +02:00
m66592-udc.c usb: gadget: udc: constify usb_ep_ops structures 2017-01-24 11:04:24 +02:00
m66592-udc.h
Makefile usb: gadget: udc: Add Synopsys UDC Platform driver 2017-06-13 13:21:03 +03:00
mv_u3d_core.c usb: gadget: mv_u3d: fix error handling in mv_u3d_probe() 2017-04-11 10:58:27 +03:00
mv_u3d.h
mv_udc_core.c usb: gadget: mv_udc: Handle return value of clk_prepare_enable. 2017-06-15 11:09:48 +03:00
mv_udc.h
net2272.c usb: add CONFIG_USB_PCI for system have both PCI HW and non-PCI based USB HW 2017-03-17 13:16:56 +09:00
net2272.h usb: add CONFIG_USB_PCI for system have both PCI HW and non-PCI based USB HW 2017-03-17 13:16:56 +09:00
net2280.c usb: changes for v4.13 merge window 2017-06-20 11:39:34 +08:00
net2280.h usb: gadget: net2280: Replace PCI pool old API 2017-03-16 18:03:31 +09:00
omap_udc.c usb: gadget: udc: constify usb_ep_ops structures 2017-01-24 11:04:24 +02:00
omap_udc.h usb: Convert pr_warning to pr_warn 2016-11-03 10:38:36 +02:00
pch_udc.c usb: gadget: udc: remove pointer dereference after free 2017-03-22 11:21:10 +02:00
pxa25x_udc.c usb: gadget: pxa25x_udc: document endianess better 2016-03-04 15:14:31 +02:00
pxa25x_udc.h usb: Convert pr_warning to pr_warn 2016-11-03 10:38:36 +02:00
pxa27x_udc.c usb: gadget: pxa27x: Remove duplicate function prototype 2017-03-27 10:46:34 +03:00
pxa27x_udc.h usb: gadget: pxa27x_udc: add ep capabilities support 2015-08-04 12:26:52 -05:00
r8a66597-udc.c usb: gadget: udc: constify usb_ep_ops structures 2017-01-24 11:04:24 +02:00
r8a66597-udc.h
renesas_usb3.c usb: gadget: udc: renesas_usb3: make usb_ep_ops const 2017-08-15 14:18:53 +03:00
s3c2410_udc.c usb: gadget: udc: s3c2410: remove unnecessary & operation 2016-11-03 10:38:27 +02:00
s3c2410_udc.h
s3c-hsudc.c usb: gadget: udc: constify usb_ep_ops structures 2017-01-24 11:04:24 +02:00
snps_udc_core.c usb: gadget: udc: Add Synopsys UDC Platform driver 2017-06-13 13:21:03 +03:00
snps_udc_plat.c usb: gadget: udc: start_udc() can be static 2017-07-18 09:31:57 +03:00
trace.c usb: gadget: add tracepoints to the gadget API 2016-06-21 10:38:41 +03:00
trace.h usb: gadget: add tracepoints to the gadget API 2016-06-21 10:38:41 +03:00
udc-xilinx.c usb: gadget: udc-xilinx: clean up a variable name 2017-05-17 14:17:25 +03:00