On Tue, Apr 21, 2020 at 05:41:58PM +0200, Christoph Hellwig wrote:

>  static ssize_t spufs_proxydma_info_read(struct file *file, char __user *buf,
>                                  size_t len, loff_t *pos)
>  {
>       struct spu_context *ctx = file->private_data;
> +     struct spu_proxydma_info info;
>       int ret;
>  
> +     if (len < sizeof(info))
> +             return -EINVAL;
> +     if (!access_ok(buf, len))
> +             return -EFAULT;
> +
>       ret = spu_acquire_saved(ctx);
>       if (ret)
>               return ret;
>       spin_lock(&ctx->csa.register_lock);
> -     ret = __spufs_proxydma_info_read(ctx, buf, len, pos);
> +     __spufs_proxydma_info_read(ctx, &info);
> +     ret = simple_read_from_buffer(buf, len, pos, &info, sizeof(info));

IDGI...  What's that access_ok() for?  If you are using 
simple_read_from_buffer(),
the damn thing goes through copy_to_user().  Why bother with separate 
access_ok()
here?

Reply via email to