[Devel] Re: [PATCH 7/9] cr: checkpoint saved_auxv as u64s
Oren Laadan
orenl at cs.columbia.edu
Tue Feb 9 09:20:14 PST 2010
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;
> +
> + 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