Thread (13 messages) 13 messages, 4 authors, 2017-06-03

Re: loosing netdevices with namespaces and unshare?

From: Eric W. Biederman <hidden>
Date: 2017-06-03 11:00:41

Cong Wang [off-list ref] writes:
On Wed, May 31, 2017 at 11:32 PM, Eric W. Biederman
[off-list ref] wrote:
quoted
Cong Wang [off-list ref] writes:
quoted
Network namespace does not special-case the physical devices,
it treats them all equally as abstract net devices.
Absolutely not true.

The relevant code is in net/core/dev.c:default_device_exit

If a network device does not implement rntl_link_ops it is returned to
the initial network namespace.   Anything else will loose physical
devices.
Hmm, I never noticed that if check...
quoted
Only for pure software based devices do we delete them.  Perhaps your
sub interface implements rtnl_link_ops?  Either that or something is
still holding a reference to your network namespace, which would prevent
the network device from being returned.
But this simply sucks:

                snprintf(fb_name, IFNAMSIZ, "dev%d", dev->ifindex);
                err = dev_change_net_namespace(dev, &init_net, fb_name);
                if (err) {
                        pr_emerg("%s: failed to move %s to init_net: %d\n",
                                 __func__, dev->name, err);
                        BUG();
                }

It is essentially hard to handle the error here, but it is quite easy to
trigger such BUG() by naming other device devX, it is no better
than just losing it.
The rename only happens if there is a conflicting device name.

Beyond that there is the entire hotplug functionality so it should be
possible to automatically detect a new device in your network namespace
and do something with it.

Eric
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help