]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.4.154/usb-gadget-r8a66597-fix-two-possible-sleep-in-atomic-context-bugs-in-init_controller.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.4.154 / usb-gadget-r8a66597-fix-two-possible-sleep-in-atomic-context-bugs-in-init_controller.patch
1 From foo@baz Tue Aug 28 16:10:37 CEST 2018
2 From: Jia-Ju Bai <baijiaju1990@gmail.com>
3 Date: Wed, 20 Jun 2018 11:54:53 +0800
4 Subject: usb: gadget: r8a66597: Fix two possible sleep-in-atomic-context bugs in init_controller()
5
6 From: Jia-Ju Bai <baijiaju1990@gmail.com>
7
8 [ Upstream commit 0602088b10a7c0b4e044a810678ef93d7cc5bf48 ]
9
10 The driver may sleep with holding a spinlock.
11 The function call paths (from bottom to top) in Linux-4.16.7 are:
12
13 [FUNC] msleep
14 drivers/usb/gadget/udc/r8a66597-udc.c, 839:
15 msleep in init_controller
16 drivers/usb/gadget/udc/r8a66597-udc.c, 96:
17 init_controller in r8a66597_usb_disconnect
18 drivers/usb/gadget/udc/r8a66597-udc.c, 93:
19 spin_lock in r8a66597_usb_disconnect
20
21 [FUNC] msleep
22 drivers/usb/gadget/udc/r8a66597-udc.c, 835:
23 msleep in init_controller
24 drivers/usb/gadget/udc/r8a66597-udc.c, 96:
25 init_controller in r8a66597_usb_disconnect
26 drivers/usb/gadget/udc/r8a66597-udc.c, 93:
27 spin_lock in r8a66597_usb_disconnect
28
29 To fix these bugs, msleep() is replaced with mdelay().
30
31 This bug is found by my static analysis tool (DSAC-2) and checked by
32 my code review.
33
34 Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
35 Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
36 Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
37 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
38 ---
39 drivers/usb/gadget/udc/r8a66597-udc.c | 4 ++--
40 1 file changed, 2 insertions(+), 2 deletions(-)
41
42 --- a/drivers/usb/gadget/udc/r8a66597-udc.c
43 +++ b/drivers/usb/gadget/udc/r8a66597-udc.c
44 @@ -835,11 +835,11 @@ static void init_controller(struct r8a66
45
46 r8a66597_bset(r8a66597, XCKE, SYSCFG0);
47
48 - msleep(3);
49 + mdelay(3);
50
51 r8a66597_bset(r8a66597, PLLC, SYSCFG0);
52
53 - msleep(1);
54 + mdelay(1);
55
56 r8a66597_bset(r8a66597, SCKE, SYSCFG0);
57