summaryrefslogtreecommitdiffstats
path: root/drivers/char/Kconfig
diff options
context:
space:
mode:
authorMathias Nyman <mathias.nyman@linux.intel.com>2018-05-14 11:57:23 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-05-14 11:05:53 +0200
commit2278446e2b7cd33ad894b32e7eb63afc7db6c86e (patch)
tree1f9a6f17a9723448c4569af931fd3db1580e7f82 /drivers/char/Kconfig
parent75bc37fefc4471e718ba8e651aa74673d4e0a9eb (diff)
downloadblackbird-op-linux-2278446e2b7cd33ad894b32e7eb63afc7db6c86e.tar.gz
blackbird-op-linux-2278446e2b7cd33ad894b32e7eb63afc7db6c86e.zip
xhci: Fix USB3 NULL pointer dereference at logical disconnect.
Hub driver will try to disable a USB3 device twice at logical disconnect, racing with xhci_free_dev() callback from the first port disable. This can be triggered with "udisksctl power-off --block-device <disk>" or by writing "1" to the "remove" sysfs file for a USB3 device in 4.17-rc4. USB3 devices don't have a similar disabled link state as USB2 devices, and use a U3 suspended link state instead. In this state the port is still enabled and connected. hub_port_connect() first disconnects the device, then later it notices that device is still enabled (due to U3 states) it will try to disable the port again (set to U3). The xhci_free_dev() called during device disable is async, so checking for existing xhci->devs[i] when setting link state to U3 the second time was successful, even if device was being freed. The regression was caused by, and whole thing revealed by, Commit 44a182b9d177 ("xhci: Fix use-after-free in xhci_free_virt_device") which sets xhci->devs[i]->udev to NULL before xhci_virt_dev() returned. and causes a NULL pointer dereference the second time we try to set U3. Fix this by checking xhci->devs[i]->udev exists before setting link state. The original patch went to stable so this fix needs to be applied there as well. Fixes: 44a182b9d177 ("xhci: Fix use-after-free in xhci_free_virt_device") Cc: <stable@vger.kernel.org> Reported-by: Jordan Glover <Golden_Miller83@protonmail.ch> Tested-by: Jordan Glover <Golden_Miller83@protonmail.ch> Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/char/Kconfig')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud