[Devel] Re: [PATCH 7/9] cr: checkpoint saved_auxv as u64s
Oren Laadan
orenl at cs.columbia.edu
Tue Feb 9 12:43:18 PST 2010
Serge E. Hallyn wrote:
> 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?
A bit hacky, but should work.
... so I'll do just that :)
Oren.
>
>>> +
>>> + 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