summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle McMartin <kyle@dreadnought.i.jkkm.org>2010-09-14 21:24:20 -0400
committerKyle McMartin <kyle@dreadnought.i.jkkm.org>2010-09-14 21:24:20 -0400
commit159f2cca9fa51994e47e52c9e0ee3e33d3956f0f (patch)
tree9a474babfa7e692d257e8cab6a799df0f748e7ed
parent278c1a8f1e5dbfe2c193e37753743200808d0922 (diff)
downloaddom0-kernel-159f2cca9fa51994e47e52c9e0ee3e33d3956f0f.tar.gz
dom0-kernel-159f2cca9fa51994e47e52c9e0ee3e33d3956f0f.tar.xz
dom0-kernel-159f2cca9fa51994e47e52c9e0ee3e33d3956f0f.zip
fix rejects (and get git to rebase the rest as well...)
-rw-r--r--01-compat-make-compat_alloc_user_space-incorporate-the-access_ok-check.patch51
-rw-r--r--02-compat-test-rax-for-the-system-call-number-not-eax.patch6
-rw-r--r--03-compat-retruncate-rax-after-ia32-syscall-entry-tracing.patch6
-rw-r--r--aio-check-for-multiplication-overflow-in-do_io_submit.patch20
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 = &current->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;