From: Eric Dumazet Date: Thu, 23 Jun 2022 04:34:41 +0000 (+0000) Subject: ip6mr: do not acquire mrt_lock in pim6_rcv() X-Git-Tag: v6.0-rc1~141^2~295^2~8 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6d08658736fc8b4baae778a7f51d2c7baa47eeff;p=thirdparty%2Fkernel%2Flinux.git ip6mr: do not acquire mrt_lock in pim6_rcv() rcu_read_lock() protection is more than enough. vif_dev_read() supports either mrt_lock or rcu_read_lock(). Signed-off-by: Eric Dumazet Signed-off-by: David S. Miller --- diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index a6d97952bf530..fa6720377e82d 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c @@ -559,12 +559,11 @@ static int pim6_rcv(struct sk_buff *skb) if (ip6mr_fib_lookup(net, &fl6, &mrt) < 0) goto drop; - reg_vif_num = mrt->mroute_reg_vif_num; - read_lock(&mrt_lock); + /* Pairs with WRITE_ONCE() in mif6_add()/mif6_delete() */ + reg_vif_num = READ_ONCE(mrt->mroute_reg_vif_num); if (reg_vif_num >= 0) reg_dev = vif_dev_read(&mrt->vif_table[reg_vif_num]); - read_unlock(&mrt_lock); if (!reg_dev) goto drop;