[CRIU] [PATCH] Fix kerndat_link_nsid() on systems with more than 10 interfaces
Adrian Reber
areber at redhat.com
Wed Nov 28 16:19:52 MSK 2018
On Tue, Nov 27, 2018 at 10:18:08AM -0800, Andrei Vagin wrote:
> On Thu, Nov 22, 2018 at 01:44:03PM +0000, Adrian Reber wrote:
> > From: Adrian Reber <areber at redhat.com>
> >
> > On a system with more than 10 network interfaces the link_nsid check
> > fails:
> >
> > $ criu check --feature link_nsid
> > Warn (criu/cr-check.c:1237): NSID isn't supported
> >
> > The function kerndat_link_nsid() uses:
> >
> > nde.ifindex = 10;
> >
> > This fails as there is already an interface with ifindex 10.
> >
> > This patch moves the creation of the socket into the second network
> > namespace and the feature check succeeds.
> >
> > Suggested-by: Jiri Benc <jbenc at redhat.com>
> > Signed-off-by: Adrian Reber <areber at redhat.com>
> > ---
> > criu/net.c | 12 ++++++------
> > 1 file changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/criu/net.c b/criu/net.c
> > index ec66d1e..c1a6e30 100644
> > --- a/criu/net.c
> > +++ b/criu/net.c
> > @@ -3148,12 +3148,6 @@ int kerndat_link_nsid()
> > };
> > int nsfd, sk, ret;
> >
> > - sk = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
> > - if (sk < 0) {
> > - pr_perror("Unable to create a netlink socket");
> > - exit(1);
> > - }
> > -
> > if (unshare(CLONE_NEWNET)) {
> > pr_perror("Unable create a network namespace");
> > exit(1);
> > @@ -3168,6 +3162,12 @@ int kerndat_link_nsid()
> > exit(1);
> > }
> >
> > + sk = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
>
> it should be moved after the first unshare(CLONE_NEWNET). The second
> netns is created to check peer_ifindex and peer_nsid
If I create a lot of tun devices on my host this still fails if I move
it after the first unshare().
If the socket is created after the second unshare() it works.
Adrian
More information about the CRIU
mailing list