linux_dsm_epyc7002/drivers/usb/gadget/udc
Alan Stern 50896c4103 USB: dummy-hcd: Fix failure to give back unlinked URBs
The syzkaller USB fuzzer identified a failure mode in which dummy-hcd
would never give back an unlinked URB.  This causes usb_kill_urb() to
hang, leading to WARNINGs and unkillable threads.

In dummy-hcd, all URBs are given back by the dummy_timer() routine as
it scans through the list of pending URBS.  Failure to give back URBs
can be caused by failure to start or early exit from the scanning
loop.  The code currently has two such pathways: One is triggered when
an unsupported bus transfer speed is encountered, and the other by
exhausting the simulated bandwidth for USB transfers during a frame.

This patch removes those two paths, thereby allowing all unlinked URBs
to be given back in a timely manner.  It adds a check for the bus
speed when the gadget first starts running, so that dummy_timer() will
never thereafter encounter an unsupported speed.  And it prevents the
loop from exiting as soon as the total bandwidth has been used up (the
scanning loop continues, giving back unlinked URBs as they are found,
but not transferring any more data).

Thanks to Andrey Konovalov for manually running the syzkaller fuzzer
to help track down the source of the bug.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-and-tested-by: syzbot+d919b0f29d7b5a4994b9@syzkaller.appspotmail.com
CC: <stable@vger.kernel.org>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
2019-05-03 09:13:47 +03:00
..
aspeed-vhub usb: gadget: fix various indentation issues 2019-02-07 13:14:51 +02:00
bdc USB: changes for v5.1 merge window 2019-02-15 09:08:57 +01:00
amd5536udc_pci.c USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
amd5536udc.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
at91_udc.c proc: introduce proc_create_single{,_data} 2018-05-16 07:23:35 +02:00
at91_udc.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
atmel_usba_udc.c Remove 'type' argument from access_ok() function 2019-01-03 18:57:57 -08:00
atmel_usba_udc.h USB: udc: atmel_usba_udc: no need to check return value of debugfs_create functions 2018-05-31 12:54:22 +02:00
bcm63xx_udc.c USB: gadget: udc: bcm63xx_udc: no need to check return value of debugfs_create functions 2018-05-31 12:54:22 +02:00
core.c USB: gadget: Improve kerneldoc for usb_ep_dequeue() 2019-02-06 08:37:16 +02:00
dummy_hcd.c USB: dummy-hcd: Fix failure to give back unlinked URBs 2019-05-03 09:13:47 +03:00
fotg210-udc.c fotg210-udc: pass struct device to DMA API functions 2019-02-11 15:30:14 +02:00
fotg210.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
fsl_mxc_udc.c headers: separate linux/mod_devicetable.h from linux/platform_device.h 2018-07-07 17:52:26 +02:00
fsl_qe_udc.c USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
fsl_qe_udc.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
fsl_udc_core.c usb: gadget: fsl_udc_core: fixup struct_udc_setup documentation 2018-10-02 10:43:12 +03:00
fsl_usb2_udc.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
fusb300_udc.c USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
fusb300_udc.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
goku_udc.c proc: introduce proc_create_single{,_data} 2018-05-16 07:23:35 +02:00
goku_udc.h usb: gadget: udc: change comparison to bitshift when dealing with a mask 2018-03-08 15:12:00 +02:00
gr_udc.c USB: gadget: udc: gr_udc: no need to check return value of debugfs_create functions 2018-05-31 12:54:22 +02:00
gr_udc.h USB: gadget: udc: gr_udc: no need to check return value of debugfs_create functions 2018-05-31 12:54:22 +02:00
Kconfig USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
lpc32xx_udc.c USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
m66592-udc.c treewide: setup_timer() -> timer_setup() 2017-11-21 15:57:07 -08:00
m66592-udc.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
Makefile usb/gadget: Add driver for Aspeed SoC virtual hub 2018-05-15 10:06:53 +03:00
mv_u3d_core.c USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
mv_u3d.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
mv_udc_core.c usb: gadget: udc: Remove unnecessary parentheses 2018-10-02 10:30:07 +03:00
mv_udc.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
net2272.c usb: gadget: net2272: Fix net2272_dequeue() 2019-03-20 08:50:42 +02:00
net2272.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
net2280.c usb: gadget: net2280: Fix net2280_dequeue() 2019-03-20 08:50:19 +02:00
net2280.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
omap_udc.c USB: omap_udc: fix rejection of out transfers when DMA is used 2018-11-26 12:38:03 +02:00
omap_udc.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pch_udc.c PCI: Move Rohm Vendor ID to generic list 2019-02-01 17:24:52 -06:00
pxa25x_udc.c USB: gadget: pxa25x: Re-use DEFINE_SHOW_ATTRIBUTE() macro 2018-03-08 15:12:00 +02:00
pxa25x_udc.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
pxa27x_udc.c USB: gadget: udc: pxa27x_udc: no need to check return value of debugfs_create functions 2018-05-31 12:54:22 +02:00
pxa27x_udc.h USB: gadget: udc: pxa27x_udc: no need to check return value of debugfs_create functions 2018-05-31 12:54:22 +02:00
r8a66597-udc.c usb: gadget: r8a66597: Fix a possible sleep-in-atomic-context bugs in r8a66597_queue() 2018-07-17 10:12:51 +03:00
r8a66597-udc.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
renesas_usb3.c usb: gadget: udc: renesas_usb3: add support for r8a774c0 2019-01-28 12:51:30 +02:00
s3c2410_udc.c USB: gadget: udc: s3c2410_udc: convert to DEFINE_SHOW_ATTRIBUTE 2018-12-07 08:12:15 +02:00
s3c2410_udc.h USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
s3c-hsudc.c USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
snps_udc_core.c usb: gadget: udc: reduce indentation 2019-01-28 12:51:30 +02:00
snps_udc_plat.c USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
trace.c USB: gadget: udc: Remove redundant license text 2017-11-07 15:45:02 +01:00
trace.h gadget event trace : add request pointer 2017-12-11 12:36:49 +02:00
udc-xilinx.c usb: gadget: fix spelling mistakeis "[En]queing" -> "[En]queuing" 2018-10-02 10:28:08 +03:00