On 05/26, Greentime Hu wrote:
>
> @@ -882,13 +882,18 @@ static int ptrace_regset(struct task_struct *task, int 
> req, unsigned int type,
>       const struct user_regset_view *view = task_user_regset_view(task);
>       const struct user_regset *regset = find_regset(view, type);
>       int regset_no;
> +     unsigned int size;
>
> -     if (!regset || (kiov->iov_len % regset->size) != 0)
> +     if (!regset)
>               return -EINVAL;
>
>       regset_no = regset - view->regsets;
> -     kiov->iov_len = min(kiov->iov_len,
> -                         (__kernel_size_t) (regset->n * regset->size));
> +     size = regset_size(task, regset);
> +
> +     if ((kiov->iov_len % size) != 0)
> +             return -EINVAL;

Hmm. this doesn't look right.

Before this patch we check "iov_len % regset->size", this is not the same
as "iov_len % regset_size()".

IOW, currently you can read/write, say, only the 1st register, you patch
breaks this?

Oleg.

Reply via email to