mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
arp: Convert SIOCDARP and SIOCSARP to per-netns RTNL.
ioctl(SIOCDARP/SIOCSARP) operates on a single netns fetched from an AF_INET socket in inet_ioctl(). Let's hold rtnl_net_lock() for SIOCDARP and SIOCSARP. Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20250211045057.10419-1-kuniyu@amazon.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
a3783dbf25
commit
7aca0d8a72
@@ -1062,8 +1062,8 @@ static int arp_req_set_proxy(struct net *net, struct net_device *dev, int on)
|
||||
IPV4_DEVCONF_ALL(net, PROXY_ARP) = on;
|
||||
return 0;
|
||||
}
|
||||
if (__in_dev_get_rtnl(dev)) {
|
||||
IN_DEV_CONF_SET(__in_dev_get_rtnl(dev), PROXY_ARP, on);
|
||||
if (__in_dev_get_rtnl_net(dev)) {
|
||||
IN_DEV_CONF_SET(__in_dev_get_rtnl_net(dev), PROXY_ARP, on);
|
||||
return 0;
|
||||
}
|
||||
return -ENXIO;
|
||||
@@ -1293,14 +1293,14 @@ int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg)
|
||||
|
||||
switch (cmd) {
|
||||
case SIOCDARP:
|
||||
rtnl_lock();
|
||||
rtnl_net_lock(net);
|
||||
err = arp_req_delete(net, &r);
|
||||
rtnl_unlock();
|
||||
rtnl_net_unlock(net);
|
||||
break;
|
||||
case SIOCSARP:
|
||||
rtnl_lock();
|
||||
rtnl_net_lock(net);
|
||||
err = arp_req_set(net, &r);
|
||||
rtnl_unlock();
|
||||
rtnl_net_unlock(net);
|
||||
break;
|
||||
case SIOCGARP:
|
||||
rcu_read_lock();
|
||||
|
||||
Reference in New Issue
Block a user