• Alan Stern's avatar
    USB: Gadget: dummy-hcd: Fix shift-out-of-bounds bug · c318840f
    Alan Stern authored
    The dummy-hcd driver was written under the assumption that all the
    parameters in URBs sent to its root hub would be valid.  With URBs
    sent from userspace via usbfs, that assumption can be violated.
    
    In particular, the driver doesn't fully check the port-feature values
    stored in the wValue entry of Clear-Port-Feature and Set-Port-Feature
    requests.  Values that are too large can cause the driver to perform
    an invalid left shift of more than 32 bits.  Ironically, two of those
    left shifts are unnecessary, because they implement Set-Port-Feature
    requests that hubs are not required to support, according to section
    11.24.2.13 of the USB-2.0 spec.
    
    This patch adds the appropriate checks for the port feature selector
    values and removes the unnecessary feature settings.  It also rejects
    requests to set the TEST feature or to set or clear the INDICATOR and
    C_OVERCURRENT features, as none of these are relevant to dummy-hcd's
    root-hub emulation.
    
    CC: <stable@vger.kernel.org>
    Reported-and-tested-by: syzbot+5925509f78293baa7331@syzkaller.appspotmail.com
    Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/20201230162044.GA727759@rowland.harvard.eduSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    c318840f
dummy_hcd.c 71.9 KB