aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/veth.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/veth.c')
-rw-r--r--drivers/net/veth.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 9bed694cd215..2d657f2314cb 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -340,7 +340,7 @@ static int veth_validate(struct nlattr *tb[], struct nlattr *data[])
340 340
341static struct rtnl_link_ops veth_link_ops; 341static struct rtnl_link_ops veth_link_ops;
342 342
343static int veth_newlink(struct net_device *dev, 343static int veth_newlink(struct net *src_net, struct net_device *dev,
344 struct nlattr *tb[], struct nlattr *data[]) 344 struct nlattr *tb[], struct nlattr *data[])
345{ 345{
346 int err; 346 int err;
@@ -348,6 +348,7 @@ static int veth_newlink(struct net_device *dev,
348 struct veth_priv *priv; 348 struct veth_priv *priv;
349 char ifname[IFNAMSIZ]; 349 char ifname[IFNAMSIZ];
350 struct nlattr *peer_tb[IFLA_MAX + 1], **tbp; 350 struct nlattr *peer_tb[IFLA_MAX + 1], **tbp;
351 struct net *net;
351 352
352 /* 353 /*
353 * create and register peer first 354 * create and register peer first
@@ -380,14 +381,22 @@ static int veth_newlink(struct net_device *dev,
380 else 381 else
381 snprintf(ifname, IFNAMSIZ, DRV_NAME "%%d"); 382 snprintf(ifname, IFNAMSIZ, DRV_NAME "%%d");
382 383
383 peer = rtnl_create_link(dev_net(dev), ifname, &veth_link_ops, tbp); 384 net = rtnl_link_get_net(src_net, tbp);
384 if (IS_ERR(peer)) 385 if (IS_ERR(net))
386 return PTR_ERR(net);
387
388 peer = rtnl_create_link(src_net, net, ifname, &veth_link_ops, tbp);
389 if (IS_ERR(peer)) {
390 put_net(net);
385 return PTR_ERR(peer); 391 return PTR_ERR(peer);
392 }
386 393
387 if (tbp[IFLA_ADDRESS] == NULL) 394 if (tbp[IFLA_ADDRESS] == NULL)
388 random_ether_addr(peer->dev_addr); 395 random_ether_addr(peer->dev_addr);
389 396
390 err = register_netdevice(peer); 397 err = register_netdevice(peer);
398 put_net(net);
399 net = NULL;
391 if (err < 0) 400 if (err < 0)
392 goto err_register_peer; 401 goto err_register_peer;
393 402