Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755340Ab3JIVmd (ORCPT ); Wed, 9 Oct 2013 17:42:33 -0400 Received: from mail-pb0-f46.google.com ([209.85.160.46]:41385 "EHLO mail-pb0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751854Ab3JIVmc (ORCPT ); Wed, 9 Oct 2013 17:42:32 -0400 Message-ID: <1381354949.4971.20.camel@edumazet-glaptop.roam.corp.google.com> Subject: Re: [PATCH v2 tip/core/rcu 07/13] ipv6/ip6_tunnel: Apply rcu_access_pointer() to avoid sparse false positive From: Eric Dumazet To: "Paul E. McKenney" Cc: linux-kernel@vger.kernel.org, mingo@kernel.org, laijs@cn.fujitsu.com, dipankar@in.ibm.com, akpm@linux-foundation.org, mathieu.desnoyers@efficios.com, josh@joshtriplett.org, niv@us.ibm.com, tglx@linutronix.de, peterz@infradead.org, rostedt@goodmis.org, dhowells@redhat.com, edumazet@google.com, darren@dvhart.com, fweisbec@gmail.com, sbw@mit.edu, "David S. Miller" , Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , Patrick McHardy , netdev@vger.kernel.org Date: Wed, 09 Oct 2013 14:42:29 -0700 In-Reply-To: <1381354186-16285-7-git-send-email-paulmck@linux.vnet.ibm.com> References: <20131009212920.GA15413@linux.vnet.ibm.com> <1381354186-16285-1-git-send-email-paulmck@linux.vnet.ibm.com> <1381354186-16285-7-git-send-email-paulmck@linux.vnet.ibm.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 Content-Transfer-Encoding: 7bit Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1907 Lines: 50 On Wed, 2013-10-09 at 14:29 -0700, Paul E. McKenney wrote: > From: "Paul E. McKenney" > > The sparse checking for rcu_assign_pointer() was recently upgraded > to reject non-__kernel address spaces. This also rejects __rcu, > which is almost always the right thing to do. However, the use in > ip6_tnl_unlink() is legitimate: It is assigning a pointer to an element > from an RCU-protected list, and all elements of this list are already > visible to caller. > > This commit therefore silences this false positive by laundering the > pointer using rcu_access_pointer() as suggested by Josh Triplett. > > Reported-by: kbuild test robot > Signed-off-by: Paul E. McKenney > Cc: "David S. Miller" > Cc: Alexey Kuznetsov > Cc: James Morris > Cc: Hideaki YOSHIFUJI > Cc: Patrick McHardy > Cc: netdev@vger.kernel.org > --- > net/ipv6/ip6_tunnel.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c > index 61355f7f4da5..ecc0166e1a9c 100644 > --- a/net/ipv6/ip6_tunnel.c > +++ b/net/ipv6/ip6_tunnel.c > @@ -245,7 +245,7 @@ ip6_tnl_unlink(struct ip6_tnl_net *ip6n, struct ip6_tnl *t) > (iter = rtnl_dereference(*tp)) != NULL; > tp = &iter->next) { > if (t == iter) { > - rcu_assign_pointer(*tp, t->next); > + rcu_assign_pointer(*tp, rcu_access_pointer(t->next)); > break; > } > } Then it seems a mere "*tp = t->next;" would be enough ? We do not really need a barrier. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/