lkml.org 
[lkml]   [2018]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 091/173] usb: host: u132-hcd: Fix a sleep-in-atomic-context bug in u132_get_frame()
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jia-Ju Bai <baijiaju1990@gmail.com>

    commit 6d4f268fa132742fe96dad22307c68d237356d88 upstream.

    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: Jia-Ju Bai <baijiaju1990@gmail.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/host/u132-hcd.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/usb/host/u132-hcd.c
    +++ b/drivers/usb/host/u132-hcd.c
    @@ -2559,7 +2559,7 @@ static int u132_get_frame(struct usb_hcd
    } else {
    int frame = 0;
    dev_err(&u132->platform_dev->dev, "TODO: u132_get_frame\n");
    - msleep(100);
    + mdelay(100);
    return frame;
    }
    }

    \
     
     \ /
      Last update: 2018-09-24 14:21    [W:4.116 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site