• Jia-Ju Bai's avatar
    net: nfc: nci: fix a possible sleep-in-atomic-context bug in nci_uart_tty_receive() · b7ac8936
    Jia-Ju Bai authored
    The kernel may sleep while holding a spinlock.
    The function call path (from bottom to top) in Linux 4.19 is:
    
    net/nfc/nci/uart.c, 349:
    	nci_skb_alloc in nci_uart_default_recv_buf
    net/nfc/nci/uart.c, 255:
    	(FUNC_PTR)nci_uart_default_recv_buf in nci_uart_tty_receive
    net/nfc/nci/uart.c, 254:
    	spin_lock in nci_uart_tty_receive
    
    nci_skb_alloc(GFP_KERNEL) can sleep at runtime.
    (FUNC_PTR) means a function pointer is called.
    
    To fix this bug, GFP_KERNEL is replaced with GFP_ATOMIC for
    nci_skb_alloc().
    
    This bug is found by a static analysis tool STCheck written by myself.
    Signed-off-by: default avatarJia-Ju Bai <baijiaju1990@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b7ac8936
uart.c 11.2 KB