]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: l3mdev: use skb_dst_dev_rcu() in l3mdev_l3_out()
authorEric Dumazet <edumazet@google.com>
Fri, 30 Jan 2026 19:19:06 +0000 (19:19 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 3 Feb 2026 01:09:11 +0000 (17:09 -0800)
Extend the RCU section a bit so that we can use the safer
skb_dst_dev_rcu() helper.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20260130191906.3781856-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/l3mdev.h

index 1eb8dad18f7e35baf26db23b44e182540395bba0..710e98665eb36d6154b914bee27a767ecf4f6fac 100644 (file)
@@ -207,18 +207,19 @@ struct sk_buff *l3mdev_ip6_rcv(struct sk_buff *skb)
 static inline
 struct sk_buff *l3mdev_l3_out(struct sock *sk, struct sk_buff *skb, u16 proto)
 {
-       struct net_device *dev = skb_dst(skb)->dev;
+       struct net_device *dev;
 
+       rcu_read_lock();
+       dev = skb_dst_dev_rcu(skb);
        if (netif_is_l3_slave(dev)) {
                struct net_device *master;
 
-               rcu_read_lock();
                master = netdev_master_upper_dev_get_rcu(dev);
                if (master && master->l3mdev_ops->l3mdev_l3_out)
                        skb = master->l3mdev_ops->l3mdev_l3_out(master, sk,
                                                                skb, proto);
-               rcu_read_unlock();
        }
+       rcu_read_unlock();
 
        return skb;
 }