[CRIU] External network namespaces

Adrian Reber adrian at lisas.de
Tue Sep 18 08:35:30 MSK 2018


On Mon, Sep 17, 2018 at 10:52:49PM +0000, Andrey Vagin wrote:
> On Fri, Sep 14, 2018 at 08:26:55AM +0200, Adrian Reber wrote:
> > On Thu, Sep 13, 2018 at 11:33:17AM +0200, Adrian Reber wrote:
> > > when we initially talked about external network namespace and how RPC
> > > can get those FDs you mentioned FD clashes.
> > > 
> > > I am now hitting such a FD clash:
> > > 
> > > (00.197735)      1: Inherit fd extRootNetNS -> 4 has been reused
> > > (00.197738)      1: Error (criu/util.c:251): fd 4 already in use (called at criu/files.c:1102)
> > > (00.197743)      1: Error (criu/files.c:1205): Unable to open fd=4 id=0x7d
> > > 
> > > I understand it in such a way that CRIU gets the network namespace via
> > > FD 4, but the restored process also uses FD 4 and cannot use the
> > > information from inherit FD. Any idea how to solve this? Thanks.
> > 
> > So if I just 'dup2(4, 99);' then it works. What is the right way in CRIU
> > to move an FD out of the way. There are so many FD related functions and
> > I am not sure which one is the right for this use case.
> 
> Could you try out the next patch:
> 
> diff --git a/criu/net.c b/criu/net.c
> index 0431b62f9..0331dffb8 100644
> --- a/criu/net.c
> +++ b/criu/net.c
> @@ -2210,7 +2210,6 @@ int net_set_ext(struct ns_id *ns)
>         }
>  
>         ret = switch_ns_by_fd(fd, &net_ns_desc, NULL);
> -       close(fd);
>  
>         return ret;
>  }

That works. Thanks!

		Adrian


More information about the CRIU mailing list