• Bjørn Mork's avatar
    usb: cdc-wdm: resp_count can be 0 even if WDM_READ is set · f563926f
    Bjørn Mork authored
    Do not decrement resp_count if it's already 0.
    
    We set resp_count to 0 when the device is closed.  The next open and
    read will try to clear the WDM_READ flag if there was leftover data
    in the read buffer. This fix is necessary to prevent resubmitting
    the read URB in a tight loop because resp_count becomes negative.
    
    The bug can easily be triggered from userspace by not reading all
    data in the read buffer, and then closing and reopening the chardev.
    
    Fixes: 8dd5cd53 ("usb: cdc-wdm: avoid hanging on zero length reads")
    Cc: <stable@vger.kernel.org> # 3.13
    Signed-off-by: default avatarBjørn Mork <bjorn@mork.no>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f563926f
cdc-wdm.c 25.7 KB