Le 29/04/2020 à 09:03, Jeremy Kerr a écrit :
From: Christoph Hellwig <h...@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 <h...@lst.de>
Signed-off-by: Jeremy Kerr <j...@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;

Reply via email to