linux-sg2042/drivers/usb
Alan Stern 747668dbc0 usb-storage: Set virt_boundary_mask to avoid SG overflows
The USB subsystem has always had an unusual requirement for its
scatter-gather transfers: Each element in the scatterlist (except the
last one) must have a length divisible by the bulk maxpacket size.
This is a particular issue for USB mass storage, which uses SG lists
created by the block layer rather than setting up its own.

So far we have scraped by okay because most devices have a logical
block size of 512 bytes or larger, and the bulk maxpacket sizes for
USB 2 and below are all <= 512.  However, USB 3 has a bulk maxpacket
size of 1024.  Since the xhci-hcd driver includes native SG support,
this hasn't mattered much.  But now people are trying to use USB-3
mass storage devices with USBIP, and the vhci-hcd driver currently
does not have full SG support.

The result is an overflow error, when the driver attempts to implement
an SG transfer of 63 512-byte blocks as a single
3584-byte (7 blocks) transfer followed by seven 4096-byte (8 blocks)
transfers.  The device instead sends 31 1024-byte packets followed by
a 512-byte packet, and this overruns the first SG buffer.

Ideally this would be fixed by adding better SG support to vhci-hcd.
But for now it appears we can work around the problem by
asking the block layer to respect the maxpacket limitation, through
the use of the virt_boundary_mask.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-by: Seth Bollinger <Seth.Bollinger@digi.com>
Tested-by: Seth Bollinger <Seth.Bollinger@digi.com>
CC: Ming Lei <tom.leiming@gmail.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-04-16 20:43:34 +02:00
..
atm USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
c67x00 USB: add SPDX identifiers to all remaining Makefiles 2017-11-07 15:53:48 +01:00
chipidea usb: chipidea: Refactor USB PHY selection and keep a single PHY 2019-02-27 15:51:02 +01:00
class usb: cdc-acm: fix race during wakeup blocking TX traffic 2019-03-28 00:08:49 +09:00
common Merge 5.1-rc3 into usb-next 2019-04-01 07:42:04 +02:00
core USB: hub: Remove returned value 'status' since never used 2019-04-16 12:20:14 +02:00
dwc2 usb: dwc2: use struct_size() in kzalloc() 2019-02-19 14:41:38 +01:00
dwc3 usb: dwc3: pci: add support for Comet Lake PCH ID 2019-03-20 08:46:03 +02:00
early memblock: drop memblock_alloc_*_nopanic() variants 2019-03-12 10:04:02 -07:00
gadget Merge 5.1-rc3 into usb-next 2019-04-01 07:42:04 +02:00
host usb: host: xhci-tegra: Add Tegra186 XUSB support 2019-04-16 12:15:53 +02:00
image USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
isp1760 USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
misc usb: usb251xb: fix to avoid potential NULL pointer dereference 2019-03-26 16:48:55 +09:00
mon USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
mtu3 Merge 5.1-rc3 into usb-next 2019-04-01 07:42:04 +02:00
musb USB: musb: mark expected switch fall-through 2019-02-13 19:40:20 +01:00
phy USB: changes for v5.1 merge window 2019-02-15 09:08:57 +01:00
renesas_usbhs USB: renesas_usbhs: fix spelling mistake "doens't" -> "doesn't" 2019-02-19 14:41:38 +01:00
roles usb: roles: Find the muxes by also matching against the device node 2019-02-14 10:52:25 +01:00
serial USB: serial: option: add Olicard 600 2019-03-28 09:27:22 +01:00
storage usb-storage: Set virt_boundary_mask to avoid SG overflows 2019-04-16 20:43:34 +02:00
typec Merge 5.1-rc3 into usb-next 2019-04-01 07:42:04 +02:00
usbip usbip: Remove unnecessary null check 2019-03-19 15:00:34 +01:00
wusbcore wusb: Remove unnecessary static function ckhdid_printf 2019-03-01 20:53:41 +01:00
Kconfig USB: add missing SPDX lines to Kconfig and Makefiles 2019-01-22 09:08:17 +01:00
Makefile usb: roles: Add Intel xHCI USB role switch driver 2018-03-22 13:49:27 +01:00
usb-skeleton.c usb: usb-skeleton: use irqsave() in USB's complete callback 2018-06-28 19:36:06 +09:00