[CRIU] [PATCH 3/3] mount: wait when mntns will be created to get its root

Andrew Vagin avagin at virtuozzo.com
Fri Nov 13 09:59:28 PST 2015


On Fri, Nov 13, 2015 at 07:58:26PM +0300, Pavel Emelyanov wrote:
> On 11/13/2015 05:56 PM, Andrey Vagin wrote:
> > From: Andrew Vagin <avagin at virtuozzo.com>
> > 
> > Reported-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
> > Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>
> > ---
> >  mount.c      | 2 ++
> >  namespaces.c | 1 +
> >  2 files changed, 3 insertions(+)
> > 
> > diff --git a/mount.c b/mount.c
> > index 9666e5a..df1fdf9 100644
> > --- a/mount.c
> > +++ b/mount.c
> > @@ -2929,6 +2929,8 @@ set_root:
> >  
> >  int mntns_get_root_fd(struct ns_id *mntns)
> >  {
> > +	if (mntns->type != NS_ROOT)
> > +		futex_wait_while_eq(&mntns->ns_created, 0);
> 
> Huh? All the namespaces are "created" by root task before forking
> the others in patch #2.

Their file descriptors will be closed in close_old_fds(), so we need to
open /proc/pid/root to get a namespace root.

> 
> >  	return __mntns_get_root_fd(mntns->ns_pid);
> >  }
> >  
> > diff --git a/namespaces.c b/namespaces.c
> > index 1123492..a2293c3 100644
> > --- a/namespaces.c
> > +++ b/namespaces.c
> > @@ -268,6 +268,7 @@ static unsigned int generate_ns_id(int pid, unsigned int kid, struct ns_desc *nd
> >  
> >  	nsid->type = type;
> >  	nsid->kid = kid;
> > +	futex_set(&nsid->ns_created, 1);
> >  	nsid_add(nsid, nd, ns_next_id++, pid);
> >  
> >  found:
> > 
> 


More information about the CRIU mailing list