• Jia-Ju Bai's avatar
    USB: serial: io_edgeport: fix possible sleep-in-atomic · c7b8f778
    Jia-Ju Bai authored
    According to drivers/usb/serial/io_edgeport.c, the driver may sleep
    under a spinlock.
    The function call path is:
    edge_bulk_in_callback (acquire the spinlock)
       process_rcvd_data
         process_rcvd_status
           change_port_settings
             send_iosp_ext_cmd
               write_cmd_usb
                 usb_kill_urb --> may sleep
    
    To fix it, the redundant usb_kill_urb() is removed from the error path
    after usb_submit_urb() fails.
    
    This possible bug is found by my static analysis tool (DSAC) and checked
    by my code review.
    Signed-off-by: default avatarJia-Ju Bai <baijiaju1990@gmail.com>
    Fixes: 1da177e4 ("Linux-2.6.12-rc2")
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
    c7b8f778
io_edgeport.c 100 KB