drm/msm: return -EFAULT if copy_from_user() fails
authorDan Carpenter <dan.carpenter@oracle.com>
Mon, 16 Jan 2017 11:58:08 +0000 (14:58 +0300)
committerRob Clark <robdclark@gmail.com>
Mon, 6 Feb 2017 16:28:45 +0000 (11:28 -0500)
copy_from_user_inatomic() is actually a local function that returns
-EFAULT or positive values on error.  Otherwise copy_from_user() returns
the number of bytes remaining to be copied.  We want to return -EFAULT
here.

I removed an unlikely() because we just did a copy_from_user()
so I don't think it can possibly make a difference.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Rob Clark <robdclark@gmail.com>
drivers/gpu/drm/msm/msm_gem_submit.c

index 489676568a10d15ac959093e6a09ee3f133abe45..1172fe7a9252c0828889ad1e95b17a02bae8fbf9 100644 (file)
@@ -95,13 +95,13 @@ static int submit_lookup_objects(struct msm_gem_submit *submit,
                 */
                submit->bos[i].flags = 0;
 
-               ret = copy_from_user_inatomic(&submit_bo, userptr, sizeof(submit_bo));
-               if (unlikely(ret)) {
+               if (copy_from_user_inatomic(&submit_bo, userptr, sizeof(submit_bo))) {
                        pagefault_enable();
                        spin_unlock(&file->table_lock);
-                       ret = copy_from_user(&submit_bo, userptr, sizeof(submit_bo));
-                       if (ret)
+                       if (copy_from_user(&submit_bo, userptr, sizeof(submit_bo))) {
+                               ret = -EFAULT;
                                goto out;
+                       }
                        spin_lock(&file->table_lock);
                        pagefault_disable();
                }
@@ -317,9 +317,10 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob
                uint64_t iova;
                bool valid;
 
-               ret = copy_from_user(&submit_reloc, userptr, sizeof(submit_reloc));
-               if (ret)
+               if (copy_from_user(&submit_reloc, userptr, sizeof(submit_reloc))) {
+                       ret = -EFAULT;
                        goto out;
+               }
 
                if (submit_reloc.submit_offset % 4) {
                        DRM_ERROR("non-aligned reloc offset: %u\n",