Commit e6f8f1a739b652c56e6f959d6714d92e05621e21

Authored by Pavel Emelyanov
Committed by David S. Miller
1 parent 9c7dafbfab

veth: Allow to create peer link with given ifindex

The ifinfomsg is in there (thanks kaber@ for foreseeing this long time ago),
so take the given ifidex and register netdev with it.

Ben noticed, that this code path previously ignored ifmp->ifi_index and
userland could be passing in garbage. Thus it may now fail occasionally
because the value clashes with an existing interface.

To address this it's assumed that if the caller specifies the ifindex for
the veth master device, then it's aware of this possibility and should
explicitly specify (or set to 0 for auto-assignment) the peer's ifindex as
well. With this the compatibility with old tools not setting ifindex is
preserved.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

Showing 1 changed file with 3 additions and 0 deletions Side-by-side Diff

... ... @@ -348,6 +348,9 @@
348 348 if (tbp[IFLA_ADDRESS] == NULL)
349 349 eth_hw_addr_random(peer);
350 350  
  351 + if (ifmp && (dev->ifindex != 0))
  352 + peer->ifindex = ifmp->ifi_index;
  353 +
351 354 err = register_netdevice(peer);
352 355 put_net(net);
353 356 net = NULL;