• Zekun Shen's avatar
    net: alx: fix race condition in alx_remove · e89df5c4
    Zekun Shen authored
    There is a race condition exist during termination. The path is
    alx_stop and then alx_remove. An alx_schedule_link_check could be called
    before alx_stop by interrupt handler and invoke alx_link_check later.
    Alx_stop frees the napis, and alx_remove cancels any pending works.
    If any of the work is scheduled before termination and invoked before
    alx_remove, a null-ptr-deref occurs because both expect alx->napis[i].
    
    This patch fix the race condition by moving cancel_work_sync functions
    before alx_free_napis inside alx_stop. Because interrupt handler can call
    alx_schedule_link_check again, alx_free_irq is moved before
    cancel_work_sync calls too.
    Signed-off-by: default avatarZekun Shen <bruceshenzk@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e89df5c4
main.c 46.8 KB