diff options
author | Kyle McMartin <kyle@dreadnought.i.jkkm.org> | 2010-09-14 21:24:20 -0400 |
---|---|---|
committer | Kyle McMartin <kyle@dreadnought.i.jkkm.org> | 2010-09-14 21:24:20 -0400 |
commit | 159f2cca9fa51994e47e52c9e0ee3e33d3956f0f (patch) | |
tree | 9a474babfa7e692d257e8cab6a799df0f748e7ed | |
parent | 278c1a8f1e5dbfe2c193e37753743200808d0922 (diff) | |
download | dom0-kernel-159f2cca9fa51994e47e52c9e0ee3e33d3956f0f.tar.gz dom0-kernel-159f2cca9fa51994e47e52c9e0ee3e33d3956f0f.tar.xz dom0-kernel-159f2cca9fa51994e47e52c9e0ee3e33d3956f0f.zip |
fix rejects (and get git to rebase the rest as well...)
4 files changed, 41 insertions, 42 deletions
diff --git a/01-compat-make-compat_alloc_user_space-incorporate-the-access_ok-check.patch b/01-compat-make-compat_alloc_user_space-incorporate-the-access_ok-check.patch index f0ecb03..75ea4ba 100644 --- a/01-compat-make-compat_alloc_user_space-incorporate-the-access_ok-check.patch +++ b/01-compat-make-compat_alloc_user_space-incorporate-the-access_ok-check.patch @@ -1,7 +1,7 @@ -From c41d68a513c71e35a14f66d71782d27a79a81ea6 Mon Sep 17 00:00:00 2001 +From f45716729488bd8263b06e7d672c8ff8f2ded8b7 Mon Sep 17 00:00:00 2001 From: H. Peter Anvin <hpa@linux.intel.com> Date: Tue, 7 Sep 2010 16:16:18 -0700 -Subject: [PATCH] compat: Make compat_alloc_user_space() incorporate the access_ok() +Subject: [PATCH 1/4] compat: Make compat_alloc_user_space() incorporate the access_ok() compat_alloc_user_space() expects the caller to independently call access_ok() to verify the returned area. A missing call could @@ -47,15 +47,15 @@ Cc: <stable@kernel.org> arch/s390/include/asm/compat.h | 2 +- arch/sparc/include/asm/compat.h | 2 +- arch/x86/include/asm/compat.h | 2 +- - include/linux/compat.h | 3 +++ + include/linux/compat.h | 2 ++ kernel/compat.c | 21 +++++++++++++++++++++ - 10 files changed, 32 insertions(+), 8 deletions(-) + 9 files changed, 30 insertions(+), 7 deletions(-) diff --git a/arch/ia64/include/asm/compat.h b/arch/ia64/include/asm/compat.h -index f90edc8..9301a28 100644 +index dfcf75b..c8662cd 100644 --- a/arch/ia64/include/asm/compat.h +++ b/arch/ia64/include/asm/compat.h -@@ -199,7 +199,7 @@ ptr_to_compat(void __user *uptr) +@@ -198,7 +198,7 @@ ptr_to_compat(void __user *uptr) } static __inline__ void __user * @@ -65,10 +65,10 @@ index f90edc8..9301a28 100644 struct pt_regs *regs = task_pt_regs(current); return (void __user *) (((regs->r12 & 0xffffffff) & -16) - len); diff --git a/arch/mips/include/asm/compat.h b/arch/mips/include/asm/compat.h -index 613f691..dbc5106 100644 +index f58aed3..27505bd 100644 --- a/arch/mips/include/asm/compat.h +++ b/arch/mips/include/asm/compat.h -@@ -145,7 +145,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) +@@ -144,7 +144,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) return (u32)(unsigned long)uptr; } @@ -78,10 +78,10 @@ index 613f691..dbc5106 100644 struct pt_regs *regs = (struct pt_regs *) ((unsigned long) current_thread_info() + THREAD_SIZE - 32) - 1; diff --git a/arch/parisc/include/asm/compat.h b/arch/parisc/include/asm/compat.h -index 02b77ba..efa0b60 100644 +index 7f32611..7c77fa9 100644 --- a/arch/parisc/include/asm/compat.h +++ b/arch/parisc/include/asm/compat.h -@@ -147,7 +147,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) +@@ -146,7 +146,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) return (u32)(unsigned long)uptr; } @@ -91,10 +91,10 @@ index 02b77ba..efa0b60 100644 struct pt_regs *regs = ¤t->thread.regs; return (void __user *)regs->gr[30]; diff --git a/arch/powerpc/include/asm/compat.h b/arch/powerpc/include/asm/compat.h -index 396d21a..a11d4ea 100644 +index 4774c2f..8d0fff3 100644 --- a/arch/powerpc/include/asm/compat.h +++ b/arch/powerpc/include/asm/compat.h -@@ -134,7 +134,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) +@@ -133,7 +133,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) return (u32)(unsigned long)uptr; } @@ -104,10 +104,10 @@ index 396d21a..a11d4ea 100644 struct pt_regs *regs = current->thread.regs; unsigned long usp = regs->gpr[1]; diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h -index 104f200..a875c2f 100644 +index 01a0802..0c940d3 100644 --- a/arch/s390/include/asm/compat.h +++ b/arch/s390/include/asm/compat.h -@@ -181,7 +181,7 @@ static inline int is_compat_task(void) +@@ -180,7 +180,7 @@ static inline int is_compat_task(void) #endif @@ -117,10 +117,10 @@ index 104f200..a875c2f 100644 unsigned long stack; diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h -index 5016f76..6f57325 100644 +index 0e70625..612bb38 100644 --- a/arch/sparc/include/asm/compat.h +++ b/arch/sparc/include/asm/compat.h -@@ -167,7 +167,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) +@@ -166,7 +166,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) return (u32)(unsigned long)uptr; } @@ -130,10 +130,10 @@ index 5016f76..6f57325 100644 struct pt_regs *regs = current_thread_info()->kregs; unsigned long usp = regs->u_regs[UREG_I6]; diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h -index 306160e..1d9cd27 100644 +index 9a9c7bd..c8c9a74 100644 --- a/arch/x86/include/asm/compat.h +++ b/arch/x86/include/asm/compat.h -@@ -205,7 +205,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) +@@ -204,7 +204,7 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) return (u32)(unsigned long)uptr; } @@ -143,23 +143,22 @@ index 306160e..1d9cd27 100644 struct pt_regs *regs = task_pt_regs(current); return (void __user *)regs->sp - len; diff --git a/include/linux/compat.h b/include/linux/compat.h -index 9ddc878..5778b55 100644 +index af931ee..cab23f2 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h -@@ -360,5 +360,8 @@ extern ssize_t compat_rw_copy_check_uvector(int type, - const struct compat_iovec __user *uvector, unsigned long nr_segs, - unsigned long fast_segs, struct iovec *fast_pointer, - struct iovec **ret_pointer); -+ +@@ -309,5 +309,7 @@ asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename, + asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, + int flags, int mode); + +extern void __user *compat_alloc_user_space(unsigned long len); + #endif /* CONFIG_COMPAT */ #endif /* _LINUX_COMPAT_H */ diff --git a/kernel/compat.c b/kernel/compat.c -index e167efc..c9e2ec0 100644 +index 180d188..61112e5 100644 --- a/kernel/compat.c +++ b/kernel/compat.c -@@ -1126,3 +1126,24 @@ compat_sys_sysinfo(struct compat_sysinfo __user *info) +@@ -1136,3 +1136,24 @@ compat_sys_sysinfo(struct compat_sysinfo __user *info) return 0; } diff --git a/02-compat-test-rax-for-the-system-call-number-not-eax.patch b/02-compat-test-rax-for-the-system-call-number-not-eax.patch index 15ff0ca..8fd7490 100644 --- a/02-compat-test-rax-for-the-system-call-number-not-eax.patch +++ b/02-compat-test-rax-for-the-system-call-number-not-eax.patch @@ -1,7 +1,7 @@ -From 36d001c70d8a0144ac1d038f6876c484849a74de Mon Sep 17 00:00:00 2001 +From aaeacea2992c28f1d355ff7cd4c4754131bdd831 Mon Sep 17 00:00:00 2001 From: H. Peter Anvin <hpa@linux.intel.com> Date: Tue, 14 Sep 2010 12:42:41 -0700 -Subject: [PATCH] x86-64, compat: Test %rax for the syscall number, not %eax +Subject: [PATCH 2/4] x86-64, compat: Test %rax for the syscall number, not %eax On 64 bits, we always, by necessity, jump through the system call table via %rax. For 32-bit system calls, in theory the system call @@ -26,7 +26,7 @@ Cc: Andrew Morton <akpm@linux-foundation.org> 1 files changed, 7 insertions(+), 7 deletions(-) diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S -index b86feab..84e3a4e 100644 +index 5294d84..7f9eb54 100644 --- a/arch/x86/ia32/ia32entry.S +++ b/arch/x86/ia32/ia32entry.S @@ -153,7 +153,7 @@ ENTRY(ia32_sysenter_target) diff --git a/03-compat-retruncate-rax-after-ia32-syscall-entry-tracing.patch b/03-compat-retruncate-rax-after-ia32-syscall-entry-tracing.patch index b7fa739..96c269b 100644 --- a/03-compat-retruncate-rax-after-ia32-syscall-entry-tracing.patch +++ b/03-compat-retruncate-rax-after-ia32-syscall-entry-tracing.patch @@ -1,7 +1,7 @@ -From eefdca043e8391dcd719711716492063030b55ac Mon Sep 17 00:00:00 2001 +From 1fa16daaa76d1b132c8fee027c11bad5a5d25761 Mon Sep 17 00:00:00 2001 From: Roland McGrath <roland@redhat.com> Date: Tue, 14 Sep 2010 12:22:58 -0700 -Subject: [PATCH] x86-64, compat: Retruncate rax after ia32 syscall entry tracing +Subject: [PATCH 3/4] x86-64, compat: Retruncate rax after ia32 syscall entry tracing In commit d4d6715, we reopened an old hole for a 64-bit ptracer touching a 32-bit tracee in system call entry. A %rax value set via ptrace at the @@ -19,7 +19,7 @@ Signed-off-by: H. Peter Anvin <hpa@linux.intel.com> 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S -index 84e3a4e..518bb99 100644 +index 7f9eb54..4edd8eb 100644 --- a/arch/x86/ia32/ia32entry.S +++ b/arch/x86/ia32/ia32entry.S @@ -50,7 +50,12 @@ diff --git a/aio-check-for-multiplication-overflow-in-do_io_submit.patch b/aio-check-for-multiplication-overflow-in-do_io_submit.patch index 36b949c..8706792 100644 --- a/aio-check-for-multiplication-overflow-in-do_io_submit.patch +++ b/aio-check-for-multiplication-overflow-in-do_io_submit.patch @@ -1,23 +1,23 @@ -From 75e1c70fc31490ef8a373ea2a4bea2524099b478 Mon Sep 17 00:00:00 2001 +From be18992d0630149403bfae5882601cf01a7d4eea Mon Sep 17 00:00:00 2001 From: Jeff Moyer <jmoyer@redhat.com> Date: Fri, 10 Sep 2010 14:16:00 -0700 -Subject: [PATCH] aio: check for multiplication overflow in do_io_submit +Subject: [PATCH 4/4] aio: check for multiplication overflow in do_io_submit MIME-Version: 1.0 -Content-Type: text/plain; charset=utf8 +Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tavis Ormandy pointed out that do_io_submit does not do proper bounds checking on the passed-in iocb array: -Â Â Â Â if (unlikely(nr < 0)) -Â Â Â Â Â Â Â Â return -EINVAL; + if (unlikely(nr < 0)) + return -EINVAL; -Â Â Â Â if (unlikely(!access_ok(VERIFY_READ, iocbpp, (nr*sizeof(iocbpp))))) -Â Â Â Â Â Â Â Â return -EFAULT; Â Â Â Â Â Â Â Â Â Â Â ^^^^^^^^^^^^^^^^^^ + if (unlikely(!access_ok(VERIFY_READ, iocbpp, (nr*sizeof(iocbpp))))) + return -EFAULT; ^^^^^^^^^^^^^^^^^^ The attached patch checks for overflow, and if it is detected, the number of iocbs submitted is scaled down to a number that will fit in -the long. Â This is an ok thing to do, as sys_io_submit is documented as +the long. This is an ok thing to do, as sys_io_submit is documented as returning the number of iocbs submitted, so callers should handle a return value of less than the 'nr' argument passed in. @@ -29,10 +29,10 @@ Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/fs/aio.c b/fs/aio.c -index 3006b5b..1320b2a 100644 +index 02a2c93..b84a769 100644 --- a/fs/aio.c +++ b/fs/aio.c -@@ -1659,6 +1659,9 @@ long do_io_submit(aio_context_t ctx_id, long nr, +@@ -1639,6 +1639,9 @@ SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, nr, if (unlikely(nr < 0)) return -EINVAL; |