From: Jiri Pirko Date: Sat, 20 May 2017 13:01:31 +0000 (+0200) Subject: net/sched: properly assign RCU pointer in tcf_chain_tp_insert/remove X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=31efcc250a1dea96edca6595a9639d898cf99ae5;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git net/sched: properly assign RCU pointer in tcf_chain_tp_insert/remove *p_filter_chain is rcu-dereferenced on reader path. So here in writer, property assign the pointer. Fixes: 2190d1d0944f ("net: sched: introduce helpers to work with filter chains") Signed-off-by: Jiri Pirko Signed-off-by: David S. Miller --- diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 4020b8d932a1..85088ed07f6a 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -351,7 +351,7 @@ static void tcf_chain_tp_insert(struct tcf_chain *chain, { if (chain->p_filter_chain && *chain_info->pprev == chain->filter_chain) - *chain->p_filter_chain = tp; + rcu_assign_pointer(*chain->p_filter_chain, tp); RCU_INIT_POINTER(tp->next, tcf_chain_tp_prev(chain_info)); rcu_assign_pointer(*chain_info->pprev, tp); } @@ -363,7 +363,7 @@ static void tcf_chain_tp_remove(struct tcf_chain *chain, struct tcf_proto *next = rtnl_dereference(chain_info->next); if (chain->p_filter_chain && tp == chain->filter_chain) - *chain->p_filter_chain = next; + RCU_INIT_POINTER(*chain->p_filter_chain, next); RCU_INIT_POINTER(*chain_info->pprev, next); }