• S
    USB: xhci: Fix issue with set interface after stall. · 1624ae1c
    Sarah Sharp 提交于
    When the USB core installs a new interface, it unconditionally clears the
    halts on all the endpoints on the new interface.  Usually the xHCI host
    needs to know when an endpoint is reset, so it can change its internal
    endpoint state.  In this case, it doesn't care, because the endpoints were
    never halted in the first place.
    
    To avoid issuing a redundant Reset Endpoint command, the xHCI driver looks
    at xhci_virt_ep->stopped_td to determine if the endpoint was actually
    halted.  However, the functions that handle the stall never set that
    variable to NULL after it dealt with the stall.  So if an endpoint stalled
    and a Reset Endpoint command completed, and then the class driver tried to
    install a new alternate setting, the xHCI driver would access the old
    xhci_virt_ep->stopped_td pointer.  A similar problem occurs if the
    endpoint has been stopped to cancel a transfer.
    Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
    Cc: stable <stable@kernel.org>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
    1624ae1c
xhci-ring.c 73.2 KB