[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