[CRIU] [PATCH 2/2] criu: don't trigger a bug if a task wants to restore a root mntns
Andrew Vagin
avagin at virtuozzo.com
Fri Nov 27 05:40:10 PST 2015
On Fri, Nov 27, 2015 at 04:17:20PM +0300, Pavel Emelyanov wrote:
> On 11/27/2015 04:00 PM, Andrey Vagin wrote:
> > From: Andrew Vagin <avagin at virtuozzo.com>
> >
> > It's possiable, if a parent task lives in a sub-mntns and
> > its child lives in the root mntns. A mount namespace is
> > restored before forking children, so all children are created
> > in parent's mount namespace. If a child lives in another
> > mount namespace, we need to move it into the required mntns.
> >
> > Reported-by: Mr Jenkins
> > Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>
> > ---
> > mount.c | 11 +++++++----
> > 1 file changed, 7 insertions(+), 4 deletions(-)
> >
> > diff --git a/mount.c b/mount.c
> > index 6ad8058..afb5986 100644
> > --- a/mount.c
> > +++ b/mount.c
> > @@ -2637,7 +2637,7 @@ int restore_task_mnt_ns(struct pstree_item *current)
> > return -1;
> > }
> >
> > - BUG_ON(nsid->type != NS_OTHER);
> > + BUG_ON(nsid->type == NS_CRIU);
> >
> > if (do_restore_task_mnt_ns(nsid, current))
> > return -1;
> > @@ -2656,8 +2656,6 @@ void fini_restore_mntns(void)
> > for (nsid = ns_ids; nsid != NULL; nsid = nsid->next) {
> > if (nsid->nd != &mnt_ns_desc)
> > continue;
> > - if (root_item->ids->mnt_ns_id == nsid->id)
> > - continue;
>
> How about skipping NS_CRIU namespace? Is it on the list?
Nom it isn't.
>
> > close(nsid->mnt.ns_fd);
> > }
> > }
> > @@ -2856,8 +2854,13 @@ int prepare_mnt_ns(void)
> >
> > if (nsid->nd != &mnt_ns_desc)
> > continue;
> > - if (root_item->ids->mnt_ns_id == nsid->id)
> > + if (root_item->ids->mnt_ns_id == nsid->id) {
>
> Maybe fix this check to be nsid->type == NS_ROOT?
We can. It's the same.
>
> > + /* Pin one with a file descriptor */
> > + nsid->mnt.ns_fd = open_proc(PROC_SELF, "ns/mnt");
> > + if (nsid->mnt.ns_fd < 0)
> > + goto err;
> > continue;
> > + }
> >
> > /* Create the new mount namespace */
> > if (unshare(CLONE_NEWNS)) {
> >
>
More information about the CRIU
mailing list