diff options
Diffstat (limited to 'drivers/net/veth.c')
-rw-r--r-- | drivers/net/veth.c | 15 |
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 | ||
341 | static struct rtnl_link_ops veth_link_ops; | 341 | static struct rtnl_link_ops veth_link_ops; |
342 | 342 | ||
343 | static int veth_newlink(struct net_device *dev, | 343 | static 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 | ||