• Sarah Sharp's avatar
    xhci: Reject double add of active endpoints. · fa75ac37
    Sarah Sharp authored
    While trying to switch a UAS device from the BOT configuration to the UAS
    configuration via the bConfigurationValue file, Tanya ran into an issue in
    the USB core.  usb_disable_device() sets entries in udev->ep_out and
    udev->ep_out to NULL, but doesn't call into the xHCI bandwidth management
    functions to remove the BOT configuration endpoints from the xHCI host's
    internal structures.
    
    The USB core would then attempt to add endpoints for the UAS
    configuration, and some of the endpoints had the same address as endpoints
    in the BOT configuration.  The xHCI driver blindly added the endpoints
    again, but the xHCI host controller rejected the Configure Endpoint
    command because active endpoints were added without being dropped.
    
    Make the xHCI driver reject calls to xhci_add_endpoint() that attempt to
    add active endpoints without first calling xhci_drop_endpoint().
    
    This should be backported to kernels as old as 2.6.31.
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Reported-by: default avatarTanya Brokhman <tlinder@codeaurora.org>
    Cc: stable@kernel.org
    fa75ac37
xhci.c 93.4 KB