aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2017-05-21 15:06:44 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-05-21 15:06:44 -0400
commitf3926e4c2a4b53c25a998de168d4eef6d0360369 (patch)
tree5ef9849c4a96da979919c4fa01b22e58e20ad4b7
parent970c305aa802346aaa741ab241f6f3f63d623cc0 (diff)
parenta8c39544a6eb2093c04afd5005b6192bd0e880c6 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull misc uaccess fixes from Al Viro: "Fix for unsafe_put_user() (no callers currently in mainline, but anyone starting to use it will step into that) + alpha osf_wait4() infoleak fix" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: osf_wait4(): fix infoleak fix unsafe_put_user()
-rw-r--r--arch/alpha/kernel/osf_sys.c6
-rw-r--r--arch/x86/include/asm/uaccess.h2
2 files changed, 5 insertions, 3 deletions
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c
index 9ec56dc97374..ce93124a850b 100644
--- a/arch/alpha/kernel/osf_sys.c
+++ b/arch/alpha/kernel/osf_sys.c
@@ -1201,8 +1201,10 @@ SYSCALL_DEFINE4(osf_wait4, pid_t, pid, int __user *, ustatus, int, options,
1201 if (!access_ok(VERIFY_WRITE, ur, sizeof(*ur))) 1201 if (!access_ok(VERIFY_WRITE, ur, sizeof(*ur)))
1202 return -EFAULT; 1202 return -EFAULT;
1203 1203
1204 err = 0; 1204 err = put_user(status, ustatus);
1205 err |= put_user(status, ustatus); 1205 if (ret < 0)
1206 return err ? err : ret;
1207
1206 err |= __put_user(r.ru_utime.tv_sec, &ur->ru_utime.tv_sec); 1208 err |= __put_user(r.ru_utime.tv_sec, &ur->ru_utime.tv_sec);
1207 err |= __put_user(r.ru_utime.tv_usec, &ur->ru_utime.tv_usec); 1209 err |= __put_user(r.ru_utime.tv_usec, &ur->ru_utime.tv_usec);
1208 err |= __put_user(r.ru_stime.tv_sec, &ur->ru_stime.tv_sec); 1210 err |= __put_user(r.ru_stime.tv_sec, &ur->ru_stime.tv_sec);
diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h
index 68766b276d9e..d9668c3beb5b 100644
--- a/arch/x86/include/asm/uaccess.h
+++ b/arch/x86/include/asm/uaccess.h
@@ -703,7 +703,7 @@ extern struct movsl_mask {
703#define unsafe_put_user(x, ptr, err_label) \ 703#define unsafe_put_user(x, ptr, err_label) \
704do { \ 704do { \
705 int __pu_err; \ 705 int __pu_err; \
706 __put_user_size((x), (ptr), sizeof(*(ptr)), __pu_err, -EFAULT); \ 706 __put_user_size((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)), __pu_err, -EFAULT); \
707 if (unlikely(__pu_err)) goto err_label; \ 707 if (unlikely(__pu_err)) goto err_label; \
708} while (0) 708} while (0)
709 709