Re: [patch v2 2/4] x86, ptrace: regset extensions to support xstate

Oleg Nesterov
2010-02-10T15:36:11Z

On 02/10, Oleg Nesterov wrote:
>
> static inline int user_regset_copyout(unsigned int *pos, unsigned int *count,
> void **kbuf,
> void __user **ubuf, const void *data,
> const int start_pos, const int end_pos)
> {
> if (*count == 0)
> return 0;
> BUG_ON(*pos < start_pos);
> if (end_pos < 0 || *pos < end_pos) {
> unsigned int copy = (end_pos < 0 ? *count
> : min(*count, end_pos - *pos));
> data += *pos - start_pos;
> ^^^
> Is it correct? Shouldn't it be
>
> data += *pos + start_pos;
>
> ?

Ah, I seem to understand. start_pos is not the offset inside *data as
I thought. It is needed to compensate the "*pos += copy" addition which
was done by the previous user_regset_copyout().

This means that xstateregs_get() is right, it copies xstate_fx_sw_bytes
but uses sizeof(i387_fxsave_struct) as start_pos.

So tricky... I must admit, I don't understand the point.

Oleg.