Skip to content

Commit 00fb982

Browse files
q2venPaolo Abeni
authored andcommitted
dev: Hold per-netns RTNL in (un)?register_netdev().
Let's hold per-netns RTNL of dev_net(dev) in register_netdev() and unregister_netdev(). Signed-off-by: Kuniyuki Iwashima <[email protected]> Reviewed-by: Eric Dumazet <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent 7bd72a4 commit 00fb982

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

net/core/dev.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10731,12 +10731,16 @@ EXPORT_SYMBOL_GPL(init_dummy_netdev);
1073110731
*/
1073210732
int register_netdev(struct net_device *dev)
1073310733
{
10734+
struct net *net = dev_net(dev);
1073410735
int err;
1073510736

10736-
if (rtnl_lock_killable())
10737+
if (rtnl_net_lock_killable(net))
1073710738
return -EINTR;
10739+
1073810740
err = register_netdevice(dev);
10739-
rtnl_unlock();
10741+
10742+
rtnl_net_unlock(net);
10743+
1074010744
return err;
1074110745
}
1074210746
EXPORT_SYMBOL(register_netdev);
@@ -11606,9 +11610,11 @@ EXPORT_SYMBOL(unregister_netdevice_many);
1160611610
*/
1160711611
void unregister_netdev(struct net_device *dev)
1160811612
{
11609-
rtnl_lock();
11613+
struct net *net = dev_net(dev);
11614+
11615+
rtnl_net_lock(net);
1161011616
unregister_netdevice(dev);
11611-
rtnl_unlock();
11617+
rtnl_net_unlock(net);
1161211618
}
1161311619
EXPORT_SYMBOL(unregister_netdev);
1161411620

0 commit comments

Comments
 (0)