[Devel] Re: [PATCH 7/9] cr: checkpoint saved_auxv as u64s

Serge E. Hallyn serue at us.ibm.com
Tue Feb 9 12:20:35 PST 2010


Quoting Oren Laadan (orenl at cs.columbia.edu):
> 
> 
> serue at us.ibm.com wrote:
> > From: Serge E. Hallyn <serue at us.ibm.com>
> > 
> > unsigned longs are not a good value to checkpoint between
> > x86-32 and x86-64 32-bit tasks :)
> > 
> > Signed-off-by: Serge E. Hallyn <serue at us.ibm.com>
> > ---
> >  checkpoint/checkpoint.c        |    5 +--
> >  checkpoint/memory.c            |   53 +++++++++++++++++++++++++++++++++++++--
> >  checkpoint/restart.c           |    6 ++--
> >  include/linux/checkpoint_hdr.h |    2 +-
> >  4 files changed, 56 insertions(+), 10 deletions(-)
> 
> [...]
> 
> Sketch for a sanity check:
> 
> > +static int ckpt_read_auxv(struct ckpt_ctx *ctx, struct mm_struct *mm)
> > +{
> > +	int i, ret;
> > +	u64 *buf = kmalloc(CKPT_AT_SZ, GFP_KERNEL);
> > +
> > +	if (!buf)
> > +		return -ENOMEM;
> > +	ret = _ckpt_read_buffer(ctx, buf, CKPT_AT_SZ);
> > +	if (ret < 0) {
> > +		kfree(buf);
> > +		return ret;
> > +	}
> > +
> 
> 	ret = -E2BIG;
> > +	for (i=0; i<AT_VECTOR_SIZE; i++)
> > +		if (buf[i] > (u64) ULONG_MAX)
> 			goto out;
> 
> 	ret = -EINVAL;
> 	for (i=0; i<AT_VECTOR_SIZE; i++)
> 		if (mm->saved_auxv[i] == AT_NULL)
> 			ret = 0;
> 	if (ret < 0)
> 		goto out;

Yup, that would work.

Alternatively, do you think it would be safe to just
always set the last entry to AT_NULL?

> > +
> > +	for (i=0; i<AT_VECTOR_SIZE; i++)
> > +		mm->saved_auxv[i] = buf[i];
> > +
>  out:
> > +	kfree(buf);
> > +	return 0;
> 	       ret;
> 
> [...]
> 
> Oren.
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers




More information about the Devel mailing list