linux/drivers/usb/misc
Jia-Ju Bai b8abd3f42f usb: misc: uss720: Fix two sleep-in-atomic-context bugs
commit bc8acc214d upstream.

async_complete() in uss720.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] set_1284_register(GFP_KERNEL)
drivers/usb/misc/uss720.c, 372:
  set_1284_register in parport_uss720_frob_control
drivers/parport/ieee1284.c, 560:
  [FUNC_PTR]parport_uss720_frob_control in parport_ieee1284_ack_data_avail
drivers/parport/ieee1284.c, 577:
  parport_ieee1284_ack_data_avail in parport_ieee1284_interrupt
./include/linux/parport.h, 474:
  parport_ieee1284_interrupt in parport_generic_irq
drivers/usb/misc/uss720.c, 116:
  parport_generic_irq in async_complete

[FUNC] get_1284_register(GFP_KERNEL)
drivers/usb/misc/uss720.c, 382:
  get_1284_register in parport_uss720_read_status
drivers/parport/ieee1284.c, 555:
  [FUNC_PTR]parport_uss720_read_status in parport_ieee1284_ack_data_avail
drivers/parport/ieee1284.c, 577:
  parport_ieee1284_ack_data_avail in parport_ieee1284_interrupt
./include/linux/parport.h, 474:
  parport_ieee1284_interrupt in parport_generic_irq
drivers/usb/misc/uss720.c, 116:
  parport_generic_irq in async_complete

Note that [FUNC_PTR] means a function pointer call is used.

To fix these bugs, GFP_KERNEL is replaced with GFP_ATOMIC.

These bugs are found by my static analysis tool DSAC.

Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2018-12-16 22:09:08 +00:00
..
sisusbvga USB: sisusb: add device id for Magic Control USB video 2014-10-05 13:40:57 -07:00
adutux.c usb: misc: adutux: remove redundant error check on copy_to_user return code 2017-06-05 21:17:02 +01:00
appledisplay.c USB: appledisplay: fix race between reading and writing from the device 2014-05-27 16:03:57 -07:00
cypress_cy7c63.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
cytherm.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
ehset.c usb: ehci: Add support for SINGLE_STEP_SET_FEATURE test of EHSET 2013-08-12 13:13:32 -07:00
emi26.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
emi62.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
ezusb.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
ftdi-elan.c usb: ftdi-elan: Use pr_<level> 2014-04-24 13:13:59 -07:00
idmouse.c USB: idmouse: fix NULL-deref at probe 2017-07-18 18:40:13 +01:00
iowarrior.c USB: iowarrior: fix info ioctl on big-endian hosts 2017-09-15 18:29:41 +01:00
isight_firmware.c Merge branch 'usb-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb 2012-01-09 12:09:47 -08:00
Kconfig USB: ELAN: Remove useless "default M" lines 2014-02-11 13:47:13 -08:00
ldusb.c usb: ldusb: add PIDs for new CASSY devices supported by this driver 2018-06-16 22:22:16 +01:00
legousbtower.c usb: misc: legousbtower: Fix memory leak 2017-08-26 02:14:50 +01:00
Makefile usb: misc: EHSET Test Fixture device driver for host compliance 2013-07-25 11:49:30 -07:00
rio500.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
rio500_usb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
trancevibrator.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
usb3503.c usb: misc: usb3503: Update error code in print message 2018-11-20 18:06:03 +00:00
usb_u132.h Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6 2006-12-01 16:41:58 -08:00
usblcd.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
usbled.c usb/misc/usbled: Add Riso Kagaku Webmail Notifier 2014-02-11 14:00:16 -08:00
usbsevseg.c usb: delete non-required instances of include <linux/init.h> 2014-01-08 15:01:39 -08:00
usbtest.c usb: usbtest: fix NULL pointer dereference 2017-11-11 13:33:40 +00:00
uss720.c usb: misc: uss720: Fix two sleep-in-atomic-context bugs 2018-12-16 22:09:08 +00:00
yurex.c USB: yurex: Fix buffer over-read in yurex_write() 2018-12-16 22:09:04 +00:00