Callers of tcf_block_put() could pass NULL so we can't use block->q before checking if block is NULL or not.
tcf_block_put_ext() callers are fine, it is always non-NULL. Fixes: 8c4083b30e56 ("net: sched: add block bind/unbind notif. and extended block_get/put") Reported-by: Dave Taht <dave.t...@gmail.com> Cc: Jiri Pirko <j...@mellanox.com> Signed-off-by: Cong Wang <xiyou.wangc...@gmail.com> --- net/sched/cls_api.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index a26c690b48ac..ad35bb4dffaa 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -340,9 +340,6 @@ void tcf_block_put_ext(struct tcf_block *block, { struct tcf_chain *chain, *tmp; - if (!block) - return; - tcf_block_offload_unbind(block, q, ei); list_for_each_entry_safe(chain, tmp, &block->chain_list, list) @@ -362,6 +359,8 @@ void tcf_block_put(struct tcf_block *block) { struct tcf_block_ext_info ei = {0, }; + if (!block) + return; tcf_block_put_ext(block, NULL, block->q, &ei); } -- 2.13.0