[CRIU] [PATCH] check: try to call clone with CLONE_NEWPID and CLONE_PARENT
Adrian Reber
adrian at lisas.de
Tue Jun 30 06:18:04 PDT 2015
On Tue, Jun 30, 2015 at 03:48:25PM +0300, Andrew Vagin wrote:
> Adrian, could you apply this patch and try to execute "criu check"?
Error (cr-check.c:711): CLONE_PARENT | CLONE_NEWPID don't work together
This means my kernel needs patching, right?
Adrian
> On Tue, Jun 30, 2015 at 02:12:07PM +0300, Andrey Vagin wrote:
> > This combination was forbidden in 3.12
> > commit 40a0d32d1eaffe6aac7324ca92604b6b3977eb0e :
> > "fork: unify and tighten up CLONE_NEWUSER/CLONE_NEWPID checks"
> >
> > and then it was permited again in 3.13:
> > commit 1f7f4dde5c945f41a7abc2285be43d918029ecc5
> > fork: Allow CLONE_PARENT after setns(CLONE_NEWPID)
> >
> > Cc: Adrian Reber <adrian at lisas.de>
> > Signed-off-by: Andrey Vagin <avagin at openvz.org>
> > ---
> > cr-check.c | 28 ++++++++++++++++++++++++++++
> > 1 file changed, 28 insertions(+)
> >
> > diff --git a/cr-check.c b/cr-check.c
> > index 7cf796a..bf1b729 100644
> > --- a/cr-check.c
> > +++ b/cr-check.c
> > @@ -688,6 +688,33 @@ static int check_fdinfo_lock(void)
> > return 0;
> > }
> >
> > +struct clone_arg {
> > + /*
> > + * Reserve some space for clone() to locate arguments
> > + * and retcode in this place
> > + */
> > + char stack[128] __attribute__((aligned (8)));
> > + char stack_ptr[0];
> > +};
> > +
> > +static int clone_cb(void *_arg) {
> > + exit(0);
> > +}
> > +
> > +static int check_clone_parent_vs_pid()
> > +{
> > + struct clone_arg ca;
> > + pid_t pid;
> > +
> > + pid = clone(clone_cb, ca.stack_ptr, CLONE_NEWPID | CLONE_PARENT, &ca);
> > + if (pid < 0) {
> > + pr_err("CLONE_PARENT | CLONE_NEWPID don't work together\n");
> > + return -1;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > static int (*chk_feature)(void);
> >
> > int cr_check(void)
> > @@ -741,6 +768,7 @@ int cr_check(void)
> > ret |= check_mnt_id();
> > ret |= check_aio_remap();
> > ret |= check_fdinfo_lock();
> > + ret |= check_clone_parent_vs_pid();
> >
> > out:
> > if (!ret)
> > --
> > 2.1.0
> >
More information about the CRIU
mailing list