android_kernel_samsung_a7y1.../drivers/usb/gadget/udc
Jia-Ju Bai bcec15fd02 usb: gadget: udc: fix possible sleep-in-atomic-context bugs in gr_probe()
[ Upstream commit 9c1ed62ae0690dfe5d5e31d8f70e70a95cb48e52 ]

The driver may sleep while holding a spinlock.
The function call path (from bottom to top) in Linux 4.19 is:

drivers/usb/gadget/udc/core.c, 1175:
	kzalloc(GFP_KERNEL) in usb_add_gadget_udc_release
drivers/usb/gadget/udc/core.c, 1272:
	usb_add_gadget_udc_release in usb_add_gadget_udc
drivers/usb/gadget/udc/gr_udc.c, 2186:
	usb_add_gadget_udc in gr_probe
drivers/usb/gadget/udc/gr_udc.c, 2183:
	spin_lock in gr_probe

drivers/usb/gadget/udc/core.c, 1195:
	mutex_lock in usb_add_gadget_udc_release
drivers/usb/gadget/udc/core.c, 1272:
	usb_add_gadget_udc_release in usb_add_gadget_udc
drivers/usb/gadget/udc/gr_udc.c, 2186:
	usb_add_gadget_udc in gr_probe
drivers/usb/gadget/udc/gr_udc.c, 2183:
	spin_lock in gr_probe

drivers/usb/gadget/udc/gr_udc.c, 212:
	debugfs_create_file in gr_probe
drivers/usb/gadget/udc/gr_udc.c, 2197:
	gr_dfs_create in gr_probe
drivers/usb/gadget/udc/gr_udc.c, 2183:
    spin_lock in gr_probe

drivers/usb/gadget/udc/gr_udc.c, 2114:
	devm_request_threaded_irq in gr_request_irq
drivers/usb/gadget/udc/gr_udc.c, 2202:
	gr_request_irq in gr_probe
drivers/usb/gadget/udc/gr_udc.c, 2183:
    spin_lock in gr_probe

kzalloc(GFP_KERNEL), mutex_lock(), debugfs_create_file() and
devm_request_threaded_irq() can sleep at runtime.

To fix these possible bugs, usb_add_gadget_udc(), gr_dfs_create() and
gr_request_irq() are called without handling the spinlock.

These bugs are found by a static analysis tool STCheck written by myself.

Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-04-07 13:55:50 +02:00
..
bdc A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
amd5536udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
amd5536udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
at91_udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
at91_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
atmel_usba_udc.c usb: gadget: udc: atmel: Fix interrupt storm in FIFO mode. 2020-04-07 11:49:23 +02:00
atmel_usba_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
bcm63xx_udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
dummy_hcd.c USB: dummy-hcd: fix power budget for SuperSpeed mode 2020-04-07 08:09:26 +02:00
fotg210-udc.c usb: gadget: udc: fotg210-udc: Fix a sleep-in-atomic-context bug in fotg210_get_status() 2020-04-07 12:32:09 +02:00
fotg210.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
fsl_mxc_udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
fsl_qe_udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
fsl_qe_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
fsl_udc_core.c usb: fsl: Check memory resource before releasing it 2020-04-07 11:49:21 +02:00
fsl_usb2_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
fusb300_udc.c usb: gadget: fusb300_udc: Fix memory leak of fusb300->ep[i] 2020-04-06 19:17:47 +02:00
fusb300_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
goku_udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
goku_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
gr_udc.c usb: gadget: udc: fix possible sleep-in-atomic-context bugs in gr_probe() 2020-04-07 13:55:50 +02:00
gr_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
Kconfig A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
lpc32xx_udc.c usb: udc: lpc32xx: fix bad bit shift operation 2020-04-07 09:26:30 +02:00
m66592-udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
m66592-udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
Makefile A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
mv_u3d_core.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
mv_u3d.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
mv_udc_core.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
mv_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
net2272.c usb: gadget: net2272: Fix net2272_dequeue() 2020-04-06 16:41:19 +02:00
net2272.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
net2280.c usb: gadget: net2280: Fix net2280_dequeue() 2020-04-06 16:41:17 +02:00
net2280.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
omap_udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
omap_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
pch_udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
pxa25x_udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
pxa25x_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
pxa27x_udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
pxa27x_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
r8a66597-udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
r8a66597-udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
s3c-hsudc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
s3c2410_udc.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
s3c2410_udc.h A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
udc-core.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30
udc-xilinx.c A750FXXU4CTBC 2020-03-27 21:51:54 +05:30