Message ID | 20250207135841.1948589-4-edumazet@google.com (mailing list archive) |
---|---|
State | Accepted |
Commit | becbd5850c03ed33b232083dd66c6e38c0c0e569 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: second round to use dev_net_rcu() | expand |
On 2/7/25 6:58 AM, Eric Dumazet wrote: > __neigh_notify() can be called without RTNL or RCU protection. > > Use RCU protection to avoid potential UAF. > > Fixes: 426b5303eb43 ("[NETNS]: Modify the neighbour table code so it handles multiple network namespaces") > Signed-off-by: Eric Dumazet <edumazet@google.com> > --- > net/core/neighbour.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > Reviewed-by: David Ahern <dsahern@kernel.org>
From: Eric Dumazet <edumazet@google.com> Date: Fri, 7 Feb 2025 13:58:35 +0000 > __neigh_notify() can be called without RTNL or RCU protection. > > Use RCU protection to avoid potential UAF. > > Fixes: 426b5303eb43 ("[NETNS]: Modify the neighbour table code so it handles multiple network namespaces") > Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 89656d180bc60c57516d56be69774ed0c7b352b2..bd0251bd74a1f8e08543642e5dc938ed2c5fdfda 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -3447,10 +3447,12 @@ static const struct seq_operations neigh_stat_seq_ops = { static void __neigh_notify(struct neighbour *n, int type, int flags, u32 pid) { - struct net *net = dev_net(n->dev); struct sk_buff *skb; int err = -ENOBUFS; + struct net *net; + rcu_read_lock(); + net = dev_net_rcu(n->dev); skb = nlmsg_new(neigh_nlmsg_size(), GFP_ATOMIC); if (skb == NULL) goto errout; @@ -3463,9 +3465,11 @@ static void __neigh_notify(struct neighbour *n, int type, int flags, goto errout; } rtnl_notify(skb, net, 0, RTNLGRP_NEIGH, NULL, GFP_ATOMIC); - return; + goto out; errout: rtnl_set_sk_err(net, RTNLGRP_NEIGH, err); +out: + rcu_read_unlock(); } void neigh_app_ns(struct neighbour *n)
__neigh_notify() can be called without RTNL or RCU protection. Use RCU protection to avoid potential UAF. Fixes: 426b5303eb43 ("[NETNS]: Modify the neighbour table code so it handles multiple network namespaces") Signed-off-by: Eric Dumazet <edumazet@google.com> --- net/core/neighbour.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)