[PATCH 2/2] powerpc/spufs: stop using access_ok
Christophe Leroy
christophe.leroy at c-s.fr
Thu Apr 30 01:00:04 AEST 2020
Le 29/04/2020 à 09:03, Jeremy Kerr a écrit :
> From: Christoph Hellwig <hch at lst.de>
>
> Just use the proper non __-prefixed get/put_user variants where that is
> not done yet.
But it means you are doing the access_ok() check everytime, which is
what is to be avoided by doing the access_ok() once then using the
__-prefixed variant.
Christophe
>
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> Signed-off-by: Jeremy Kerr <jk at ozlabs.org>
> ---
> arch/powerpc/platforms/cell/spufs/file.c | 42 +++++-------------------
> 1 file changed, 8 insertions(+), 34 deletions(-)
>
> diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c
> index b4e1ef650b40..cd7d10f27fad 100644
> --- a/arch/powerpc/platforms/cell/spufs/file.c
> +++ b/arch/powerpc/platforms/cell/spufs/file.c
> @@ -590,17 +590,12 @@ static ssize_t spufs_mbox_read(struct file *file, char __user *buf,
> size_t len, loff_t *pos)
> {
> struct spu_context *ctx = file->private_data;
> - u32 mbox_data, __user *udata;
> + u32 mbox_data, __user *udata = (void __user *)buf;
> ssize_t count;
>
> if (len < 4)
> return -EINVAL;
>
> - if (!access_ok(buf, len))
> - return -EFAULT;
> -
> - udata = (void __user *)buf;
> -
> count = spu_acquire(ctx);
> if (count)
> return count;
> @@ -616,7 +611,7 @@ static ssize_t spufs_mbox_read(struct file *file, char __user *buf,
> * but still need to return the data we have
> * read successfully so far.
> */
> - ret = __put_user(mbox_data, udata);
> + ret = put_user(mbox_data, udata);
> if (ret) {
> if (!count)
> count = -EFAULT;
> @@ -698,17 +693,12 @@ static ssize_t spufs_ibox_read(struct file *file, char __user *buf,
> size_t len, loff_t *pos)
> {
> struct spu_context *ctx = file->private_data;
> - u32 ibox_data, __user *udata;
> + u32 ibox_data, __user *udata = (void __user *)buf;
> ssize_t count;
>
> if (len < 4)
> return -EINVAL;
>
> - if (!access_ok(buf, len))
> - return -EFAULT;
> -
> - udata = (void __user *)buf;
> -
> count = spu_acquire(ctx);
> if (count)
> goto out;
> @@ -727,7 +717,7 @@ static ssize_t spufs_ibox_read(struct file *file, char __user *buf,
> }
>
> /* if we can't write at all, return -EFAULT */
> - count = __put_user(ibox_data, udata);
> + count = put_user(ibox_data, udata);
> if (count)
> goto out_unlock;
>
> @@ -741,7 +731,7 @@ static ssize_t spufs_ibox_read(struct file *file, char __user *buf,
> * but still need to return the data we have
> * read successfully so far.
> */
> - ret = __put_user(ibox_data, udata);
> + ret = put_user(ibox_data, udata);
> if (ret)
> break;
> }
> @@ -836,17 +826,13 @@ static ssize_t spufs_wbox_write(struct file *file, const char __user *buf,
> size_t len, loff_t *pos)
> {
> struct spu_context *ctx = file->private_data;
> - u32 wbox_data, __user *udata;
> + u32 wbox_data, __user *udata = (void __user *)buf;
> ssize_t count;
>
> if (len < 4)
> return -EINVAL;
>
> - udata = (void __user *)buf;
> - if (!access_ok(buf, len))
> - return -EFAULT;
> -
> - if (__get_user(wbox_data, udata))
> + if (get_user(wbox_data, udata))
> return -EFAULT;
>
> count = spu_acquire(ctx);
> @@ -873,7 +859,7 @@ static ssize_t spufs_wbox_write(struct file *file, const char __user *buf,
> /* write as much as possible */
> for (count = 4, udata++; (count + 4) <= len; count += 4, udata++) {
> int ret;
> - ret = __get_user(wbox_data, udata);
> + ret = get_user(wbox_data, udata);
> if (ret)
> break;
>
> @@ -1982,9 +1968,6 @@ static ssize_t spufs_mbox_info_read(struct file *file, char __user *buf,
> u32 stat, data;
> int ret;
>
> - if (!access_ok(buf, len))
> - return -EFAULT;
> -
> ret = spu_acquire_saved(ctx);
> if (ret)
> return ret;
> @@ -2028,9 +2011,6 @@ static ssize_t spufs_ibox_info_read(struct file *file, char __user *buf,
> u32 stat, data;
> int ret;
>
> - if (!access_ok(buf, len))
> - return -EFAULT;
> -
> ret = spu_acquire_saved(ctx);
> if (ret)
> return ret;
> @@ -2082,9 +2062,6 @@ static ssize_t spufs_wbox_info_read(struct file *file, char __user *buf,
> u32 data[ARRAY_SIZE(ctx->csa.spu_mailbox_data)];
> int ret, count;
>
> - if (!access_ok(buf, len))
> - return -EFAULT;
> -
> ret = spu_acquire_saved(ctx);
> if (ret)
> return ret;
> @@ -2143,9 +2120,6 @@ static ssize_t spufs_dma_info_read(struct file *file, char __user *buf,
> struct spu_dma_info info;
> int ret;
>
> - if (!access_ok(buf, len))
> - return -EFAULT;
> -
> ret = spu_acquire_saved(ctx);
> if (ret)
> return ret;
>
More information about the Linuxppc-dev
mailing list