linux/drivers/usb/core
Mathias Nyman f744c85ad3 usb: Fix out of sync data toggle if a configured device is reconfigured
commit cfd54fa83a upstream.

Userspace drivers that use a SetConfiguration() request to "lightweight"
reset an already configured usb device might cause data toggles to get out
of sync between the device and host, and the device becomes unusable.

The xHCI host requires endpoints to be dropped and added back to reset the
toggle. If USB core notices the new configuration is the same as the
current active configuration it will avoid these extra steps by calling
usb_reset_configuration() instead of usb_set_configuration().

A SetConfiguration() request will reset the device side data toggles.
Make sure usb_reset_configuration() function also drops and adds back the
endpoints to ensure data toggles are in sync.

To avoid code duplication split the current usb_disable_device() function
and reuse the endpoint specific part.

Cc: stable <stable@vger.kernel.org>
Tested-by: Martin Thierer <mthierer@gmail.com>
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20200901082528.12557-1-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-09-17 13:45:31 +02:00
..
buffer.c
config.c USB: core: add endpoint-blacklist quirk 2020-02-28 16:38:46 +01:00
devices.c
devio.c usb: usbfs: Suppress problematic bind and unbind uevents. 2019-12-31 16:35:16 +01:00
driver.c
endpoint.c
file.c USB: core: Fix races in character device registration and deregistraion 2019-08-25 10:47:59 +02:00
generic.c
hcd-pci.c usb: hcd: use managed device resources 2019-09-06 10:22:15 +02:00
hcd.c
hub.c usb: core: hub: limit HUB_QUIRK_DISABLE_AUTOSUSPEND to USB5534B 2020-05-20 08:18:47 +02:00
hub.h USB: hub: Fix the broken detection of USB3 device in SMSC hub 2020-02-28 16:38:47 +01:00
Kconfig
ledtrig-usbport.c
Makefile
message.c usb: Fix out of sync data toggle if a configured device is reconfigured 2020-09-17 13:45:31 +02:00
notify.c
of.c
otg_whitelist.h
phy.c
phy.h
port.c usb: core: port: do error out if usb_autopm_get_interface() fails 2020-03-11 14:14:59 +01:00
quirks.c USB: quirks: Ignore duplicate endpoint on Sound Devices MixPre-D 2020-09-03 11:24:30 +02:00
sysfs.c usb: core: fix slab-out-of-bounds Read in read_descriptors 2020-09-17 13:45:30 +02:00
urb.c usb: core: urb: fix URB structure initialization function 2019-12-17 20:34:41 +01:00
usb-acpi.c
usb.c
usb.h USB: core: add endpoint-blacklist quirk 2020-02-28 16:38:46 +01:00