• M. Vefa Bicakci's avatar
    usbcore/driver: Fix incorrect downcast · 4df30e76
    M. Vefa Bicakci authored
    This commit resolves a minor 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 related to the way a candidate USB device driver is
    compared against the generic USB device driver. The code in
    is_dev_usb_generic_driver() assumes that the device driver in question
    is a USB device driver by calling to_usb_device_driver(dev->driver)
    to downcast; however I have observed that this assumption is not always
    true, through code instrumentation.
    
    This commit avoids the incorrect downcast altogether by comparing
    the USB device's driver (i.e., dev->driver) to the generic USB
    device driver directly. This method was suggested by Alan Stern.
    
    This bug was found while investigating Andrey Konovalov's report
    indicating usbip device driver misbehaviour with the recently merged
    generic USB device driver selection feature. The report is linked
    below.
    
    Fixes: d5643d22 ("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: default avatarAndrey Konovalov <andreyknvl@google.com>
    Signed-off-by: default avatarM. Vefa Bicakci <m.v.b@runbox.com>
    Link: https://lore.kernel.org/r/20200922110703.720960-4-m.v.b@runbox.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    4df30e76
driver.c 56.9 KB