Blob Blame History Raw
From c321cc07607cfe4215fc90e426ae4491fca4c49c Mon Sep 17 00:00:00 2001
From: Adrian Reber <areber@redhat.com>
Date: Thu, 22 Nov 2018 13:44:03 +0000
Subject: [PATCH] Fix kerndat_link_nsid() on systems with more than 10
 interfaces

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@redhat.com>
Signed-off-by: Adrian Reber <areber@redhat.com>
Signed-off-by: Andrei Vagin <avagin@gmail.com>
---
 criu/net.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/criu/net.c b/criu/net.c
index ec66d1e6c3..c1a6e3094f 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);
+		if (sk < 0) {
+			pr_perror("Unable to create a netlink socket");
+			exit(1);
+		}
+
 		nde.type = ND_TYPE__VETH;
 		nde.name = "veth";
 		nde.ifindex = 10;