]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/4.9.129/usb-misc-uss720-fix-two-sleep-in-atomic-context-bugs.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 4.9.129 / usb-misc-uss720-fix-two-sleep-in-atomic-context-bugs.patch
1 From bc8acc214d3f1cafebcbcd101a695bbac716595d Mon Sep 17 00:00:00 2001
2 From: Jia-Ju Bai <baijiaju1990@gmail.com>
3 Date: Sat, 1 Sep 2018 16:25:08 +0800
4 Subject: usb: misc: uss720: Fix two sleep-in-atomic-context bugs
5
6 From: Jia-Ju Bai <baijiaju1990@gmail.com>
7
8 commit bc8acc214d3f1cafebcbcd101a695bbac716595d upstream.
9
10 async_complete() in uss720.c is a completion handler function for the
11 USB driver. So it should not sleep, but it is can sleep according to the
12 function call paths (from bottom to top) in Linux-4.16.
13
14 [FUNC] set_1284_register(GFP_KERNEL)
15 drivers/usb/misc/uss720.c, 372:
16 set_1284_register in parport_uss720_frob_control
17 drivers/parport/ieee1284.c, 560:
18 [FUNC_PTR]parport_uss720_frob_control in parport_ieee1284_ack_data_avail
19 drivers/parport/ieee1284.c, 577:
20 parport_ieee1284_ack_data_avail in parport_ieee1284_interrupt
21 ./include/linux/parport.h, 474:
22 parport_ieee1284_interrupt in parport_generic_irq
23 drivers/usb/misc/uss720.c, 116:
24 parport_generic_irq in async_complete
25
26 [FUNC] get_1284_register(GFP_KERNEL)
27 drivers/usb/misc/uss720.c, 382:
28 get_1284_register in parport_uss720_read_status
29 drivers/parport/ieee1284.c, 555:
30 [FUNC_PTR]parport_uss720_read_status in parport_ieee1284_ack_data_avail
31 drivers/parport/ieee1284.c, 577:
32 parport_ieee1284_ack_data_avail in parport_ieee1284_interrupt
33 ./include/linux/parport.h, 474:
34 parport_ieee1284_interrupt in parport_generic_irq
35 drivers/usb/misc/uss720.c, 116:
36 parport_generic_irq in async_complete
37
38 Note that [FUNC_PTR] means a function pointer call is used.
39
40 To fix these bugs, GFP_KERNEL is replaced with GFP_ATOMIC.
41
42 These bugs are found by my static analysis tool DSAC.
43
44 Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
45 Cc: stable <stable@vger.kernel.org>
46 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
47
48 ---
49 drivers/usb/misc/uss720.c | 4 ++--
50 1 file changed, 2 insertions(+), 2 deletions(-)
51
52 --- a/drivers/usb/misc/uss720.c
53 +++ b/drivers/usb/misc/uss720.c
54 @@ -385,7 +385,7 @@ static unsigned char parport_uss720_frob
55 mask &= 0x0f;
56 val &= 0x0f;
57 d = (priv->reg[1] & (~mask)) ^ val;
58 - if (set_1284_register(pp, 2, d, GFP_KERNEL))
59 + if (set_1284_register(pp, 2, d, GFP_ATOMIC))
60 return 0;
61 priv->reg[1] = d;
62 return d & 0xf;
63 @@ -395,7 +395,7 @@ static unsigned char parport_uss720_read
64 {
65 unsigned char ret;
66
67 - if (get_1284_register(pp, 1, &ret, GFP_KERNEL))
68 + if (get_1284_register(pp, 1, &ret, GFP_ATOMIC))
69 return 0;
70 return ret & 0xf8;
71 }