[CRIU] [PATCH] Fix kerndat_link_nsid() on systems with more than 10 interfaces
Adrian Reber
adrian at lisas.de
Thu Nov 22 17:00:54 MSK 2018
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);
> + if (sk < 0) {
> + pr_perror("Unable to create a netlink socket");
> + exit(1);
> + }
> +
> nde.type = ND_TYPE__VETH;
> nde.name = "veth";
> nde.ifindex = 10;
Andrei, I am not 100% if this is correct. As you wrote the code in 2016,
maybe you can remember if this is correct. Maybe it also needs to be
like this:
unshare(CLONE_NEWNET);
sk = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
unshare(CLONE_NEWNET);
nsfd = open_proc(PROC_SELF, "ns/net");
Let me know and I can update the patch.
Adrian
More information about the CRIU
mailing list