[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