• Arun Ramadoss's avatar
    net: dsa: microchip: Added the condition for scheduling ksz_mib_read_work · ef1100ef
    Arun Ramadoss authored
    When the ksz module is installed and removed using rmmod, kernel crashes
    with null pointer dereferrence error. During rmmod, ksz_switch_remove
    function tries to cancel the mib_read_workqueue using
    cancel_delayed_work_sync routine and unregister switch from dsa.
    
    During dsa_unregister_switch it calls ksz_mac_link_down, which in turn
    reschedules the workqueue since mib_interval is non-zero.
    Due to which queue executed after mib_interval and it tries to access
    dp->slave. But the slave is unregistered in the ksz_switch_remove
    function. Hence kernel crashes.
    
    To avoid this crash, before canceling the workqueue, resetted the
    mib_interval to 0.
    
    v1 -> v2:
    -Removed the if condition in ksz_mib_read_work
    
    Fixes: 469b390e ("net: dsa: microchip: use delayed_work instead of timer + work")
    Signed-off-by: default avatarArun Ramadoss <arun.ramadoss@microchip.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ef1100ef
ksz_common.c 10.8 KB