• Bjørn Mork's avatar
    usb: cdc-wdm: avoid hanging on zero length reads · 8dd5cd53
    Bjørn Mork authored
    commit 73e06865 ("USB: cdc-wdm: support back-to-back
    USB_CDC_NOTIFY_RESPONSE_AVAILABLE notifications") implemented
    queued response handling. This added a new requirement: The read
    urb must be resubmitted every time we clear the WDM_READ flag if
    the response counter indicates that the device is waiting for a
    read.
    
    Fix by factoring out the code handling the WMD_READ clearing and
    possible urb submission, calling it everywhere we clear the flag.
    
    Without this fix, the driver ends up in a state where the read urb
    is inactive, but the response counter is positive after a zero
    length read.  This prevents the read urb from ever being submitted
    again and the driver appears to be hanging.
    
    Fixes: 73e06865 ("USB: cdc-wdm: support back-to-back USB_CDC_NOTIFY_RESPONSE_AVAILABLE notifications")
    Cc: Greg Suarez <gsuarez@smithmicro.com>
    Signed-off-by: default avatarBjørn Mork <bjorn@mork.no>
    Cc: stable <stable@vger.kernel.org> # 3.13
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8dd5cd53
cdc-wdm.c 25.7 KB