Commit 10cc2b50 authored by Herbert Xu's avatar Herbert Xu Committed by David S. Miller
Browse files

bridge: Fix RCU race in br_multicast_stop



Thanks to Paul McKenny for pointing out that it is incorrect to use
synchronize_rcu_bh to ensure that pending callbacks have completed.
Instead we should use rcu_barrier_bh.

Reported-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 49f5fcfd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1135,7 +1135,7 @@ void br_multicast_stop(struct net_bridge *br)

	if (mdb->old) {
		spin_unlock_bh(&br->multicast_lock);
		synchronize_rcu_bh();
		rcu_barrier_bh();
		spin_lock_bh(&br->multicast_lock);
		WARN_ON(mdb->old);
	}