• Ian Abbott's avatar
    [PATCH] USB serial visor: fix race in open/close · 00d6058a
    Ian Abbott authored
    The anti user-DoS mechanism in the USB serial 'visor' driver can fail in
    the following way:
    
    visor_open: priv->outstanding_urbs = 0
    visor_write: ++priv->outstanding_urbs
    visor_close:
    visor_open: priv->outstanding_urbs = 0
    visor_write_bulk_callback: --priv->outstanding_urbs
    
    So priv->outstanding_urbs ends up as (unsigned long)(-1).  Not good!
    
    I haven't seen this happen with the visor driver as I don't have the
    hardware, but I have seen it while testing a patch to implement the same
    functionality in the ftdi_sio driver (patch not yet submitted).
    
    The fix is pretty simple: don't reinitialize outstanding_urbs in
    visor_open.  (Again, I haven't tested the fix in visor, but I have
    tested it in ftdi_sio.)
    Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    00d6058a
visor.c 31.8 KB