Skip to content
  • Jia-Ju Bai's avatar
    usb: misc: uss720: Fix two sleep-in-atomic-context bugs · bc8acc21
    Jia-Ju Bai authored
    
    
    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: default avatarJia-Ju Bai <baijiaju1990@gmail.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    bc8acc21