Skip to content
  • Jia-Ju Bai's avatar
    net: cadence: Fix a sleep-in-atomic-context bug in macb_halt_tx() · 16fe10cf
    Jia-Ju Bai authored
    
    
    The kernel module may sleep with holding a spinlock.
    
    The function call paths (from bottom to top) in Linux-4.16 are:
    
    [FUNC] usleep_range
    drivers/net/ethernet/cadence/macb_main.c, 648:
    	usleep_range in macb_halt_tx
    drivers/net/ethernet/cadence/macb_main.c, 730:
    	macb_halt_tx in macb_tx_error_task
    drivers/net/ethernet/cadence/macb_main.c, 721:
    	_raw_spin_lock_irqsave in macb_tx_error_task
    
    To fix this bug, usleep_range() is replaced with udelay().
    
    This bug is found by my static analysis tool DSAC.
    
    Signed-off-by: default avatarJia-Ju Bai <baijiaju1990@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    16fe10cf