• Jiri Pirko's avatar
    net: sched: don't do tcf_chain_flush from tcf_chain_destroy · 30d65e8f
    Jiri Pirko authored
    tcf_chain_flush needs to be called with RTNL. However, on
    free_tcf->
     tcf_action_goto_chain_fini->
      tcf_chain_put->
       tcf_chain_destroy->
        tcf_chain_flush
    callpath, it is called without RTNL.
    This issue was notified by following warning:
    
    [  155.599052] WARNING: suspicious RCU usage
    [  155.603165] 4.13.0-rc5jiri+ #54 Not tainted
    [  155.607456] -----------------------------
    [  155.611561] net/sched/cls_api.c:195 suspicious rcu_dereference_protected() usage!
    
    Since on this callpath, the chain is guaranteed to be already empty
    by check in tcf_chain_put, move the tcf_chain_flush call out and call it
    only where it is needed - into tcf_block_put.
    
    Fixes: db50514f ("net: sched: add termination action to allow goto chain")
    Signed-off-by: default avatarJiri Pirko <jiri@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    30d65e8f
cls_api.c 22.8 KB