| From 0d0138ebe24b94065580bd2601f8bb7eb6152f56 Mon Sep 17 00:00:00 2001 |
| From: Dan Rosenberg <drosenberg@vsecurity.com> |
| Date: Mon, 25 Jul 2011 17:11:53 -0700 |
| Subject: xtensa: prevent arbitrary read in ptrace |
| |
| From: Dan Rosenberg <drosenberg@vsecurity.com> |
| |
| commit 0d0138ebe24b94065580bd2601f8bb7eb6152f56 upstream. |
| |
| Prevent an arbitrary kernel read. Check the user pointer with access_ok() |
| before copying data in. |
| |
| [akpm@linux-foundation.org: s/EIO/EFAULT/] |
| Signed-off-by: Dan Rosenberg <drosenberg@vsecurity.com> |
| Cc: Christian Zankel <chris@zankel.net> |
| Cc: Oleg Nesterov <oleg@redhat.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/xtensa/kernel/ptrace.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/arch/xtensa/kernel/ptrace.c |
| +++ b/arch/xtensa/kernel/ptrace.c |
| @@ -136,6 +136,9 @@ int ptrace_setxregs(struct task_struct * |
| elf_xtregs_t *xtregs = uregs; |
| int ret = 0; |
| |
| + if (!access_ok(VERIFY_READ, uregs, sizeof(elf_xtregs_t))) |
| + return -EFAULT; |
| + |
| #if XTENSA_HAVE_COPROCESSORS |
| /* Flush all coprocessors before we overwrite them. */ |
| coprocessor_flush_all(ti); |