diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-05-21 15:06:44 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-05-21 15:06:44 -0400 |
commit | f3926e4c2a4b53c25a998de168d4eef6d0360369 (patch) | |
tree | 5ef9849c4a96da979919c4fa01b22e58e20ad4b7 | |
parent | 970c305aa802346aaa741ab241f6f3f63d623cc0 (diff) | |
parent | a8c39544a6eb2093c04afd5005b6192bd0e880c6 (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.c | 6 | ||||
-rw-r--r-- | arch/x86/include/asm/uaccess.h | 2 |
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) \ |
704 | do { \ | 704 | do { \ |
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 | ||