Commit 00fb9823 authored by Kuniyuki Iwashima's avatar Kuniyuki Iwashima Committed by Paolo Abeni
Browse files

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: default avatarKuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 7bd72a4a
Loading
Loading
Loading
Loading
+10 −4
Original line number Diff line number Diff line
@@ -10731,12 +10731,16 @@ EXPORT_SYMBOL_GPL(init_dummy_netdev);
 */
int register_netdev(struct net_device *dev)
{
	struct net *net = dev_net(dev);
	int err;

	if (rtnl_lock_killable())
	if (rtnl_net_lock_killable(net))
		return -EINTR;

	err = register_netdevice(dev);
	rtnl_unlock();

	rtnl_net_unlock(net);

	return err;
}
EXPORT_SYMBOL(register_netdev);
@@ -11606,9 +11610,11 @@ EXPORT_SYMBOL(unregister_netdevice_many);
 */
void unregister_netdev(struct net_device *dev)
{
	rtnl_lock();
	struct net *net = dev_net(dev);

	rtnl_net_lock(net);
	unregister_netdevice(dev);
	rtnl_unlock();
	rtnl_net_unlock(net);
}
EXPORT_SYMBOL(unregister_netdev);