linux/drivers/usb/host
Mathias Nyman 8050bbc2a2 xhci: dbc: fix bogus 1024 byte prefix if ttyDBC read races with stall event
[ Upstream commit f3d12ec847 ]

DbC may add 1024 bogus bytes to the beginneing of the receiving endpoint
if DbC hw triggers a STALL event before any Transfer Blocks (TRBs) for
incoming data are queued, but driver handles the event after it queued
the TRBs.

This is possible as xHCI DbC hardware may trigger spurious STALL transfer
events even if endpoint is empty. The STALL event contains a pointer
to the stalled TRB, and "remaining" untransferred data length.

As there are no TRBs queued yet the STALL event will just point to first
TRB position of the empty ring, with '0' bytes remaining untransferred.

DbC driver is polling for events, and may not handle the STALL event
before /dev/ttyDBC0 is opened and incoming data TRBs are queued.

The DbC event handler will now assume the first queued TRB (length 1024)
has stalled with '0' bytes remaining untransferred, and copies the data

This race situation can be practically mitigated by making sure the event
handler handles all pending transfer events when DbC reaches configured
state, and only then create dev/ttyDbC0, and start queueing transfers.
The event handler can this way detect the STALL events on empty rings
and discard them before any transfers are queued.

This does in practice solve the issue, but still leaves a small possible
gap for the race to trigger.
We still need a way to distinguish spurious STALLs on empty rings with '0'
bytes remaing, from actual STALL events with all bytes transmitted.

Cc: stable <stable@kernel.org>
Fixes: dfba2174dc ("usb: xhci: Add DbC support in xHCI driver")
Tested-by: Łukasz Bartosik <ukaszb@chromium.org>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-12-07 06:09:15 +09:00
..
bcma-hcd.c USB: bcma: Make GPIO explicitly optional 2022-11-26 09:24:44 +01:00
ehci-atmel.c usb: Remove dev_err() usage after platform_get_irq() 2019-07-30 20:29:18 +02:00
ehci-brcm.c USB: ehci_brcm_hub_control: Improve port index sanitizing 2022-01-27 11:04:26 +01:00
ehci-dbg.c usb: host: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ehci-exynos.c usb: host: ehci-exynos: Fix error check in exynos_ehci_probe() 2020-06-18 10:40:57 +02:00
ehci-fsl.c usb: host: ehci-fsl: Fix module alias 2023-01-24 07:22:46 +01:00
ehci-fsl.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
ehci-grlib.c usb: add a HCD_DMA flag instead of guestimating DMA capabilities 2019-08-21 10:03:35 -07:00
ehci-hcd.c usb: ehci: add workaround for chipidea PORTSC.PEC bug 2023-09-23 11:09:59 +02:00
ehci-hub.c usb: ehci: add workaround for chipidea PORTSC.PEC bug 2023-09-23 11:09:59 +02:00
ehci-mem.c Revert "usb: host: ehci: Use dma_pool_zalloc()" 2018-05-04 14:35:12 -07:00
ehci-mv.c USB: EHCI: ehci-mv: improve error handling in mv_ehci_enable() 2021-07-21 10:04:41 +02:00
ehci-npcm7xx.c usb/host: ehci-npcm7xx: Use pm_ptr() macro 2020-09-04 16:54:47 +02:00
ehci-omap.c usb: ehci-omap: Fix PM disable depth umbalance in ehci_hcd_omap_probe 2020-12-09 14:33:45 +01:00
ehci-orion.c usb: ehci-orion: Handle errors of clk_prepare_enable() in probe 2021-08-26 13:09:34 +02:00
ehci-pci.c usb: ehci: add pci device support for Aspeed platforms 2022-04-13 20:59:04 +02:00
ehci-platform.c usb: ehci: handshake CMD_RUN instead of STS_HALT 2021-11-12 15:05:47 +01:00
ehci-ppc-of.c usb: host: Fix refcount leak in ehci_hcd_ppc_of_probe 2022-08-17 14:23:41 +02:00
ehci-ps3.c powerpc/ps3: make system bus's remove and shutdown callbacks return void 2020-12-04 01:01:22 +11:00
ehci-q.c usb: host: move EH SINGLE_STEP_SET_FEATURE implementation to core 2021-05-13 16:01:59 +02:00
ehci-sched.c usb: host: ehci-sched: add comment about find_tt() not returning error 2020-10-28 12:21:38 +01:00
ehci-sh.c usb: ehci-hcd: fix call balance of clocks handling routines 2024-12-19 18:07:17 +01:00
ehci-spear.c usb: ehci-spear: fix call balance of sehci clk handling routines 2024-12-14 19:51:11 +01:00
ehci-st.c usb: Remove dev_err() usage after platform_get_irq() 2019-07-30 20:29:18 +02:00
ehci-sysfs.c USB: move many drivers to use DEVICE_ATTR_RW 2018-01-24 08:49:51 +01:00
ehci-timer.c usb: host: Replace empty define with do while 2018-09-28 15:03:37 +02:00
ehci-xilinx-of.c usb: add a HCD_DMA flag instead of guestimating DMA capabilities 2019-08-21 10:03:35 -07:00
ehci.h usb: ehci: add workaround for chipidea PORTSC.PEC bug 2023-09-23 11:09:59 +02:00
fhci-dbg.c USB: fhci-hcd: no need to check return value of debugfs_create functions 2018-05-31 12:54:22 +02:00
fhci-hcd.c usb: host: fhci-hcd: annotate PIPE_CONTROL switch case with fallthrough 2020-02-19 11:08:52 +01:00
fhci-hub.c USB: host: fhci: Remove redundant license text 2017-11-07 15:45:02 +01:00
fhci-mem.c USB: host: fhci: Remove redundant license text 2017-11-07 15:45:02 +01:00
fhci-q.c USB: host: fhci: Remove redundant license text 2017-11-07 15:45:02 +01:00
fhci-sched.c USB/Thunderbolt patches for 5.9-rc1 2020-08-05 12:13:10 -07:00
fhci-tds.c usb: host: fhci-tds: Remove unused variables 'buf' and 'extra_data' 2020-07-09 17:19:59 +02:00
fhci.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
fotg210-hcd.c usb: fotg210-hcd: delete an incorrect bounds test 2024-01-05 15:13:37 +01:00
fotg210.h usb: host: fotg210: fix the actual_length of an iso packet 2021-07-21 10:03:42 +02:00
fsl-mph-dr-of.c usb: host: fsl-mph-dr-of: check return of dma_set_mask() 2020-10-28 13:19:31 +01:00
isp116x-hcd.c USB: isp116x: fix memory leak with using debugfs_lookup() 2023-03-11 13:57:36 +01:00
isp116x.h USB: host: isp116x: remove dentry pointer for debugfs 2021-03-10 09:37:15 +01:00
isp1362-hcd.c USB: isp1362: fix memory leak with using debugfs_lookup() 2023-03-11 13:57:36 +01:00
isp1362.h USB: host: isp1362: remove dentry pointer for debugfs 2021-03-10 09:37:15 +01:00
Kconfig usb: host: remove dead EHCI support for on-chip PMC MSP71xx USB controller 2021-08-18 15:32:19 +02:00
Makefile usb: xhci-mtk: support to build xhci-mtk-hcd.ko 2021-03-10 09:37:17 +01:00
max3421-hcd.c usb: host: max3421-hcd: Fix error pointer dereference in probe cleanup 2025-10-19 16:21:32 +02:00
ohci-at91.c usb: ohci-at91: Fix the unhandle interrupt when resume 2023-08-03 10:22:42 +02:00
ohci-da8xx.c usb: ohci-da8xx: ensure error return on variable error is set 2020-01-08 17:34:18 +01:00
ohci-dbg.c treewide: kmalloc() -> kmalloc_array() 2018-06-12 16:19:22 -07:00
ohci-exynos.c usb: host: ohci-exynos: Fix error handling in exynos_ohci_probe() 2020-08-27 09:25:58 +02:00
ohci-hcd.c usb: ohci: Prevent missed ohci interrupts 2024-05-17 11:51:02 +02:00
ohci-hub.c usb: fix a few cases of -Wfallthrough 2020-11-13 15:20:52 +01:00
ohci-mem.c usb: host: Fix excessive alignment restriction for local memory allocations 2019-06-28 07:57:07 +02:00
ohci-nxp.c usb: ohci-nxp: Fix refcount leak in ohci_hcd_nxp_probe 2022-08-17 14:23:41 +02:00
ohci-omap.c ARM: omap1: move omap15xx local bus handling to usb.c 2021-10-05 15:39:50 +02:00
ohci-pci.c USB: OHCI: Add quirk for LS7A OHCI controller (rev 0x02) 2025-05-02 07:44:32 +02:00
ohci-platform.c usb/ohci-platform: Fix a warning when hibernating 2020-05-18 18:15:39 +02:00
ohci-ppc-of.c usb: host: ohci-ppc-of: Fix refcount leak bug 2022-08-25 11:40:33 +02:00
ohci-ps3.c powerpc/ps3: make system bus's remove and shutdown callbacks return void 2020-12-04 01:01:22 +11:00
ohci-pxa27x.c usb: hosts: Remove in_interrupt() from comments 2020-10-28 12:32:12 +01:00
ohci-q.c USB: OHCI: Use fallthrough pseudo-keyword 2020-07-10 08:55:18 +02:00
ohci-s3c2410.c usb: hosts: Remove in_interrupt() from comments 2020-10-28 12:32:12 +01:00
ohci-sa1111.c ARM: 9048/1: sa1111: make sa1111 bus's remove callback return void 2021-02-01 19:42:13 +00:00
ohci-sm501.c USB: ohci-sm501: Add missed iounmap() in remove 2020-06-18 10:42:53 +02:00
ohci-spear.c usb: host: ohci-spear: simplify calling usb_add_hcd() 2021-07-21 10:05:05 +02:00
ohci-st.c usb: Remove dev_err() usage after platform_get_irq() 2019-07-30 20:29:18 +02:00
ohci-tmio.c usb: host: ohci-tmio: check return value after calling platform_get_resource() 2021-11-25 09:48:28 +01:00
ohci.h usb: host: ohci: Mark cc_to_error as __maybe_unused 2020-07-03 10:18:40 +02:00
oxu210hp-hcd.c drivers: usb: host: Fix deadlock in oxu_bus_suspend() 2022-06-14 18:36:21 +02:00
pci-quirks.c USB: pci-quirks: Fix HCCPARAMS register error for LS7A EHCI 2025-03-13 12:50:38 +01:00
pci-quirks.h usb: pci-quirks: Minor cleanup for AMD PLL quirk 2019-07-25 10:40:02 +02:00
r8a66597-hcd.c usb: host: r8a66597-hcd: Remove set, then over-written, but never used variable 'tmp' 2020-07-09 17:19:57 +02:00
r8a66597.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
sl811-hcd.c usb: sl811-hcd: only defined function checkdone if QUIRK2 is defined 2024-04-13 13:01:46 +02:00
sl811.h USB: host: sl811: remove dentry pointer for debugfs 2021-03-10 09:37:15 +01:00
sl811_cs.c usb: host: Mundane spello fix in the file sl811_cs.c 2021-03-18 09:02:27 +01:00
ssb-hcd.c USB: host: Remove redundant license text 2017-11-07 15:45:02 +01:00
u132-hcd.c usb: host: u132-hcd: remove redundant continue statements 2021-06-17 15:31:50 +02:00
uhci-debug.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
uhci-grlib.c usb: add a HCD_DMA flag instead of guestimating DMA capabilities 2019-08-21 10:03:35 -07:00
uhci-hcd.c USB: uhci: fix memory leak with using debugfs_lookup() 2023-03-11 13:57:35 +01:00
uhci-hcd.h USB: host: uhci: remove dentry pointer for debugfs 2021-03-10 09:37:15 +01:00
uhci-hub.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
uhci-pci.c USB: UHCI: adjust zhaoxin UHCI controllers OverCurrent bit value 2023-05-24 17:36:52 +01:00
uhci-platform.c usb: uhci-platform: Make the clock really optional 2025-05-18 08:20:37 +02:00
uhci-q.c USB: remove the URB_NO_FSBR flag 2017-12-12 13:16:07 +01:00
xhci-caps.h XHCI: Separate PORT and CAPs macros into dedicated file 2024-11-01 01:52:35 +01:00
xhci-dbg.c usb: xhci: Cleanup printk debug message for ERST 2017-12-08 17:43:52 +01:00
xhci-dbgcap.c xhci: dbc: fix bogus 1024 byte prefix if ttyDBC read races with stall event 2025-12-07 06:09:15 +09:00
xhci-dbgcap.h xhci: dbc: Avoid event polling busyloop if pending rx transfers are inactive. 2025-12-07 06:09:15 +09:00
xhci-dbgtty.c xhci: dbctty: disable ECHO flag by default 2025-07-10 15:57:49 +02:00
xhci-debugfs.c xhci: Refactor interrupter code for initial multi interrupter support. 2024-10-17 15:11:17 +02:00
xhci-debugfs.h usb: xhci: add debugfs support for ep with stream 2020-09-20 16:18:00 +02:00
xhci-ext-caps.c xhci: ext-caps: Use software node API with the properties 2021-02-05 10:08:19 +01:00
xhci-ext-caps.h usb: xhci: Increase timeout for HC halt 2021-05-13 14:47:36 +02:00
xhci-histb.c xhci: hisilicon: fix refercence leak in xhci_histb_probe 2020-11-13 14:32:43 +01:00
xhci-hub.c usb: xhci: Fix slot_id resource race conflict 2025-08-28 16:24:37 +02:00
xhci-mem.c usb: xhci: Fix slot_id resource race conflict 2025-08-28 16:24:37 +02:00
xhci-mtk-sch.c usb: xhci-mtk: fix bandwidth release issue 2022-09-08 12:28:07 +02:00
xhci-mtk.c usb: xhci-mtk: fix a short packet issue of gen1 isoc-in transfer 2024-01-25 14:52:52 -08:00
xhci-mtk.h usb: xhci-mtk: fix a short packet issue of gen1 isoc-in transfer 2024-01-25 14:52:52 -08:00
xhci-mvebu.c usb: host: xhci: mvebu: Iterate over array indexes instead of using pointer math 2023-03-11 13:57:37 +01:00
xhci-mvebu.h usb: host: xhci: mvebu: make USB 3.0 PHY optional for Armada 3720 2021-02-03 11:26:47 +01:00
xhci-pci-renesas.c usb: renesas-xhci: Fix External ROM access timeouts 2025-08-28 16:24:35 +02:00
xhci-pci.c usb: xhci: quirk for data loss in ISOC transfers 2025-07-17 18:30:51 +02:00
xhci-pci.h usb: renesas-xhci: Remove renesas_xhci_pci_exit() 2021-07-21 10:05:59 +02:00
xhci-plat.c xhci: Disable stream for xHC controller with XHCI_BROKEN_STREAMS 2025-07-17 18:30:51 +02:00
xhci-plat.h usb: xhci-plat: Don't include xhci.h 2024-05-17 11:51:03 +02:00
xhci-port.h XHCI: Separate PORT and CAPs macros into dedicated file 2024-11-01 01:52:35 +01:00
xhci-rcar.c usb: host: xhci-rcar: remove leftover quirk handling 2023-05-11 23:00:31 +09:00
xhci-rcar.h USB: host: Use the correct style for SPDX License Identifier 2020-04-16 14:32:46 +02:00
xhci-ring.c Revert "usb: xhci: Avoid Stop Endpoint retry loop if the endpoint seems Running" 2025-10-19 16:21:35 +02:00
xhci-tegra.c usb: host: tegra: Prevent host controller crash when OTG port is used 2025-05-18 08:20:37 +02:00
xhci-trace.c USB: host: xhci: Remove redundant license text 2017-11-07 15:45:02 +01:00
xhci-trace.h xhci: fix even more unsafe memory usage in xhci tracing 2021-08-26 13:06:02 +02:00
xhci.c usb: xhci: Fix slot_id resource race conflict 2025-08-28 16:24:37 +02:00
xhci.h usb: xhci: Fix slot_id resource race conflict 2025-08-28 16:24:37 +02:00