linux_dsm_epyc7002/drivers
M. Vefa Bicakci aea850cd35 usbcore/driver: Fix specific driver selection
This commit resolves a bug in the selection/discovery of more
specific USB device drivers for devices that are currently bound to
generic USB device drivers.

The bug is in the logic that determines whether a device currently
bound to a generic USB device driver should be re-probed by a
more specific USB device driver or not. The code in
__usb_bus_reprobe_drivers() used to have the following lines:

  if (usb_device_match_id(udev, new_udriver->id_table) == NULL &&
      (!new_udriver->match || new_udriver->match(udev) != 0))
 		return 0;

  ret = device_reprobe(dev);

As the reader will notice, the code checks whether the USB device in
consideration matches the identifier table (id_table) of a specific
USB device_driver (new_udriver), followed by a similar check, but this
time with the USB device driver's match function. However, the match
function's return value is not checked correctly. When match() returns
zero, it means that the specific USB device driver is *not* applicable
to the USB device in question, but the code then goes on to reprobe the
device with the new USB device driver under consideration. All this to
say, the logic is inverted.

This bug was found by code inspection and instrumentation while
investigating the root cause of the issue reported by Andrey Konovalov,
where usbip took over syzkaller's virtual USB devices in an undesired
manner. The report is linked below.

Fixes: d5643d2249 ("USB: Fix device driver race")
Cc: <stable@vger.kernel.org> # 5.8
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Bastien Nocera <hadess@hadess.net>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Valentina Manea <valentina.manea.m@gmail.com>
Cc: <syzkaller@googlegroups.com>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: M. Vefa Bicakci <m.v.b@runbox.com>
Link: https://lore.kernel.org/r/20200922110703.720960-3-m.v.b@runbox.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-09-25 16:52:49 +02:00
..
accessibility
acpi ACPI: processor: Take over RCU-idle for C3-BM idle 2020-09-16 19:36:26 +02:00
amba
android
ata
atm
auxdisplay
base
bcma
block
bluetooth
bus
cdrom
char
clk
clocksource RISC-V Fixes for 5.9-rc6 (or shortly after) 2020-09-20 10:51:11 -07:00
connector
counter
cpufreq
cpuidle powerpc fixes for 5.9 2020-09-18 11:48:25 -07:00
crypto
dax dax: Fix stack overflow when mounting fsdax pmem device 2020-09-20 08:57:36 -07:00
dca
devfreq
dio
dma
dma-buf
edac
eisa
extcon
firewire
firmware Single EFI fix for v5.9-rc: 2020-09-20 15:18:11 -07:00
fpga
fsi
gnss
gpio
gpu Mediatek DRM Fixes for Linux 5.9 2020-09-18 08:52:06 +10:00
greybus
hid
hsi
hv
hwmon
hwspinlock
hwtracing
i2c i2c: mxs: use MXS_DMA_CTRL_WAIT4END instead of DMA_CTRL_ACK 2020-09-18 23:11:44 +02:00
i3c
ide
idle
iio
infiniband
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2020-09-20 10:40:43 -07:00
interconnect
iommu iommu/amd: Restore IRTE.RemapEn bit for amd_iommu_activate_guest_mode 2020-09-18 11:17:19 +02:00
ipack
irqchip
isdn
leds
lightnvm
macintosh
mailbox
mcb
md dm: Call proper helper to determine dax support 2020-09-20 08:55:09 -07:00
media
memory
memstick
message
mfd
misc
mmc
most
mtd
mux
net
nfc
ntb
nubus
nvdimm
nvme
nvmem
of
opp
oprofile
parisc
parport
pci
pcmcia
perf
phy
pinctrl
platform
pnp
power
powercap
pps
ps3
ptp
pwm
rapidio
ras
regulator
remoteproc
reset
rpmsg
rtc
s390
sbus
scsi
sfi
sh
siox
slimbus
soc
soundwire
spi
spmi
ssb
staging
target
tc
tee
thermal
thunderbolt
tty
uio
usb usbcore/driver: Fix specific driver selection 2020-09-25 16:52:49 +02:00
vdpa
vfio
vhost
video TTY/Serial/fbcon fixes for 5.9-rc6 2020-09-20 10:46:26 -07:00
virt
virtio
visorbus
vlynq
vme
w1
watchdog
xen
zorro
Kconfig
Makefile