On 2/22/19 4:44 AM, Li RongQing wrote:
> diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
> index 6613d8dbb0e5..b73d40d68178 100644
> --- a/net/ipv6/ip6_fib.c
> +++ b/net/ipv6/ip6_fib.c
> @@ -1143,7 +1143,7 @@ static int fib6_add_rt2node(struct fib6_node *fn, 
> struct fib6_info *rt,
>  
>               atomic_inc(&rt->fib6_ref);
>               rcu_assign_pointer(rt->fib6_node, fn);
> -             rt->fib6_next = iter->fib6_next;
> +             rcu_assign_pointer(rt->fib6_next, iter->fib6_next);
>               rcu_assign_pointer(*ins, rt);
>               if (!info->skip_notify)
>                       inet6_rt_notify(RTM_NEWROUTE, rt, info, NLM_F_REPLACE);
> @@ -1761,7 +1761,9 @@ static void fib6_del_route(struct fib6_table *table, 
> struct fib6_node *fn,
>       RT6_TRACE("fib6_del_route\n");
>  
>       /* Unlink it */
> -     *rtp = rt->fib6_next;
> +     *rtp = rcu_dereference_protected(rt->fib6_next,
> +                                 lockdep_is_held(&rt->fib6_table->tb6_lock));
> +
>       rt->fib6_node = NULL;
>       net->ipv6.rt6_stats->fib_rt_entries--;
>       net->ipv6.rt6_stats->fib_discarded_routes++;
> 

There are a number of fib6_next references not using rcu api's. Why are
you only touching these 2?

Reply via email to