Paul E. McKenney
2013-Nov-16 00:40 UTC
[Bridge] [PATCH tip/core/rcu 10/14] bridge/br_mdb: Apply ACCESS_ONCE() to avoid sparse false positive
From: "Paul E. McKenney" <paulmck at linux.vnet.ibm.com> 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 __br_mdb_del() is legitimate: They are 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 these false positives by laundering the pointers using ACCESS_ONCE() as suggested by Eric Dumazet and Josh Triplett. Reported-by: kbuild test robot <fengguang.wu at intel.com> Signed-off-by: Paul E. McKenney <paulmck at linux.vnet.ibm.com> Cc: Stephen Hemminger <stephen at networkplumber.org> Cc: "David S. Miller" <davem at davemloft.net> Cc: bridge at lists.linux-foundation.org Cc: netdev at vger.kernel.org --- net/bridge/br_mdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c index 85a09bb5ca51..de7197ba8695 100644 --- a/net/bridge/br_mdb.c +++ b/net/bridge/br_mdb.c @@ -447,7 +447,7 @@ static int __br_mdb_del(struct net_bridge *br, struct br_mdb_entry *entry) if (p->port->state == BR_STATE_DISABLED) goto unlock; - rcu_assign_pointer(*pp, p->next); + ACCESS_ONCE(*pp) = p->next; /* OK: Both --rcu and visible. */ hlist_del_init(&p->mglist); del_timer(&p->timer); call_rcu_bh(&p->rcu, br_multicast_free_pg); -- 1.8.1.5
Maybe Matching Threads
- [PATCH] bridge: separate querier and query timer into IGMP/IPv4 and MLD/IPv6 ones
- [Bridge] [PATCH net-next v3] bridge: export multicast database via netlink
- [Bridge] [PATCH net-next v5] bridge: export multicast database via netlink
- [Bridge] [PATCH net-next v4] bridge: export multicast database via netlink
- [Bridge] [Patch net] bridge: do not expire mdb entry when bridge still uses it