arm64: ptrace: fix compat reg getter/setter return values
authorWill Deacon <will.deacon@arm.com>
Fri, 22 Aug 2014 13:20:24 +0000 (14:20 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 22 Jan 2015 21:27:28 +0000 (21:27 +0000)
copy_{to,from}_user return the number of bytes remaining on failure, not
an error code.

This patch returns -EFAULT when the copy operation didn't complete,
rather than expose the number of bytes not copied directly to userspace.

Signed-off-by: Will Deacon <will.deacon@arm.com>
(cherry picked from commit 85487edd252fa04718dcd735bc0f41213bbb9546)
Signed-off-by: Mark Brown <broonie@kernel.org>
arch/arm64/kernel/ptrace.c

index f9177993d1353d389dfa7d911b61420ab285252e..2b453624d5adb159cee0b4698ba2bf0e9da2e523 100644 (file)
@@ -656,8 +656,10 @@ static int compat_gpr_get(struct task_struct *target,
                        kbuf += sizeof(reg);
                } else {
                        ret = copy_to_user(ubuf, &reg, sizeof(reg));
-                       if (ret)
+                       if (ret) {
+                               ret = -EFAULT;
                                break;
+                       }
 
                        ubuf += sizeof(reg);
                }
@@ -695,8 +697,10 @@ static int compat_gpr_set(struct task_struct *target,
                        kbuf += sizeof(reg);
                } else {
                        ret = copy_from_user(&reg, ubuf, sizeof(reg));
-                       if (ret)
-                               return ret;
+                       if (ret) {
+                               ret = -EFAULT;
+                               break;
+                       }
 
                        ubuf += sizeof(reg);
                }