• Jia-Ju Bai's avatar
    usb: host: u132-hcd: Fix a sleep-in-atomic-context bug in u132_get_frame() · 6d4f268f
    Jia-Ju Bai authored
    i_usX2Y_subs_startup in usbusx2yaudio.c is a completion handler function
    for the USB driver. So it should not sleep, but it is can sleep
    according to the function call paths (from bottom to top) in Linux-4.16.
    
    [FUNC] msleep
    drivers/usb/host/u132-hcd.c, 2558:
    	msleep in u132_get_frame
    drivers/usb/core/hcd.c, 2231:
    	[FUNC_PTR]u132_get_frame in usb_hcd_get_frame_number
    drivers/usb/core/usb.c, 822:
    	usb_hcd_get_frame_number in usb_get_current_frame_number
    sound/usb/usx2y/usbusx2yaudio.c, 303:
    	usb_get_current_frame_number in i_usX2Y_urb_complete
    sound/usb/usx2y/usbusx2yaudio.c, 366:
    	i_usX2Y_urb_complete in i_usX2Y_subs_startup
    
    Note that [FUNC_PTR] means a function pointer call is used.
    
    To fix this bug, msleep() is replaced with mdelay().
    
    This bug is found by my static analysis tool DSAC.
    Signed-off-by: default avatarJia-Ju Bai <baijiaju1990@gmail.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    6d4f268f
u132-hcd.c 90.1 KB