DivestOS/Patches/OLD/bacon/Kernel-All/ch-12.1/21.patch

3699 lines
118 KiB
Diff
Raw Normal View History

2016-12-21 19:30:02 -05:00
From 63caea4637e5dfa2ffaabb6d30b0aa4db9d3fe87 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Thu, 19 Nov 2015 07:14:38 -0500
Subject: [PATCH] deal with rejected PaX patch hunks
---
arch/arm/include/asm/atomic.h | 204 ++++++++++++++--
arch/arm/include/asm/atomic.h.rej | 321 -------------------------
arch/arm/include/asm/elf.h | 4 -
arch/arm/include/asm/elf.h.rej | 11 -
arch/arm/kernel/process.c | 3 +-
arch/arm/kernel/process.c.rej | 13 -
arch/x86/boot/Makefile | 3 +
arch/x86/boot/Makefile.rej | 11 -
arch/x86/ia32/ia32entry.S | 3 +-
arch/x86/ia32/ia32entry.S.rej | 16 --
arch/x86/include/asm/fpu-internal.h | 2 +-
arch/x86/include/asm/fpu-internal.h.rej | 11 -
arch/x86/include/asm/paravirt_types.h | 6 +-
arch/x86/include/asm/paravirt_types.h.rej | 26 --
arch/x86/include/asm/pgtable_64_types.h | 5 +
arch/x86/include/asm/pgtable_64_types.h.rej | 13 -
arch/x86/kernel/entry_32.S | 17 +-
arch/x86/kernel/entry_32.S.rej | 47 ----
arch/x86/kernel/entry_64.S | 2 +-
arch/x86/kernel/entry_64.S.rej | 11 -
arch/x86/kernel/irq.c | 2 +-
arch/x86/kernel/irq.c.rej | 15 --
arch/x86/kernel/relocate_kernel_64.S | 1 +
arch/x86/kernel/relocate_kernel_64.S.rej | 18 --
arch/x86/kernel/setup.c | 2 +-
arch/x86/kernel/setup.c.rej | 10 -
arch/x86/kernel/sys_x86_64.c.rej | 11 -
arch/x86/mm/fault.c | 16 ++
arch/x86/mm/fault.c.rej | 23 --
arch/x86/mm/init.c | 2 +-
arch/x86/mm/init.c.rej | 11 -
arch/x86/mm/ioremap.c.rej | 11 -
arch/x86/mm/mmap.c | 16 +-
arch/x86/mm/mmap.c.rej | 28 ---
arch/x86/xen/xen-asm_32.S | 12 +-
arch/x86/xen/xen-asm_32.S.rej | 23 --
drivers/base/power/wakeup.c | 2 +-
drivers/base/power/wakeup.c.rej | 11 -
drivers/gpu/drm/drm_fops.c | 4 +-
drivers/gpu/drm/drm_fops.c.rej | 13 -
drivers/gpu/drm/i915/i915_gem_execbuffer.c | 4 +-
drivers/gpu/drm/i915/i915_gem_execbuffer.c.rej | 14 --
drivers/gpu/drm/i915/intel_display.c | 9 +-
drivers/gpu/drm/i915/intel_display.c.rej | 32 ---
drivers/staging/speakup/speakup_soft.c.rej | 15 --
fs/binfmt_elf.c | 14 ++
fs/binfmt_elf.c.rej | 22 --
fs/compat_ioctl.c | 8 +-
fs/compat_ioctl.c.rej | 40 ---
fs/libfs.c | 3 +
fs/libfs.c.rej | 12 -
fs/nfs/inode.c.rej | 11 -
fs/proc/nommu.c | 2 +-
fs/proc/nommu.c.rej | 11 -
fs/proc/task_mmu.c | 16 +-
fs/proc/task_mmu.c.rej | 39 ---
fs/proc/task_nommu.c | 2 +-
fs/proc/task_nommu.c.rej | 10 -
include/linux/efi.h | 2 +-
include/linux/efi.h.rej | 11 -
include/linux/gfp.h.rej | 10 -
include/linux/if_team.h | 2 +-
include/linux/if_team.h.rej | 10 -
include/linux/sysctl.h | 6 +-
include/linux/sysctl.h.rej | 14 --
include/linux/vmalloc.h | 7 +-
include/linux/vmalloc.h.rej | 23 --
include/net/inetpeer.h | 4 +-
include/net/inetpeer.h.rej | 26 --
include/sound/soc.h | 2 +-
include/sound/soc.h.rej | 11 -
kernel/audit.c | 2 +-
kernel/audit.c.rej | 11 -
kernel/module.c | 16 +-
kernel/module.c.rej | 26 --
kernel/power/process.c | 3 +-
kernel/power/process.c.rej | 19 --
kernel/rcutree.h | 2 +-
kernel/rcutree.h.rej | 11 -
kernel/smp.c | 8 +-
kernel/smp.c.rej | 28 ---
kernel/trace/trace_stack.c | 2 +-
kernel/trace/trace_stack.c.rej | 11 -
lib/bitmap.c | 2 +-
lib/bitmap.c.rej | 10 -
mm/hugetlb.c | 4 +
mm/hugetlb.c.rej | 12 -
mm/memory-failure.c | 5 +-
mm/memory-failure.c.rej | 20 --
mm/memory.c | 93 +++----
mm/memory.c.rej | 149 ------------
mm/mmap.c | 49 +++-
mm/mmap.c.rej | 103 --------
mm/swap.c | 2 +
mm/swap.c.rej | 18 --
net/bluetooth/hci_conn.c.rej | 10 -
net/bluetooth/l2cap_core.c.rej | 15 --
net/compat.c | 6 +-
net/compat.c.rej | 14 --
net/ipv4/inetpeer.c | 4 +-
net/ipv4/inetpeer.c.rej | 13 -
net/ipv4/ping.c | 2 +-
net/ipv4/ping.c.rej | 11 -
net/ipv4/route.c | 2 +-
net/ipv4/route.c.rej | 11 -
net/ipv4/udp.c | 2 +-
net/ipv4/udp.c.rej | 11 -
net/phonet/socket.c | 2 +-
net/phonet/socket.c.rej | 11 -
net/socket.c | 2 +-
net/socket.c.rej | 11 -
security/keys/compat.c | 2 +-
security/keys/compat.c.rej | 11 -
security/keys/keyctl.c | 2 +-
security/keys/keyctl.c.rej | 11 -
security/selinux/hooks.c | 2 +-
security/selinux/hooks.c.rej | 10 -
sound/soc/soc-pcm.c.rej | 11 -
sound/usb/card.h.rej | 18 --
usr/gen_init_cpio.c | 10 +-
usr/gen_init_cpio.c.rej | 24 --
121 files changed, 455 insertions(+), 1731 deletions(-)
delete mode 100644 arch/arm/include/asm/atomic.h.rej
delete mode 100644 arch/arm/include/asm/elf.h.rej
delete mode 100644 arch/arm/kernel/process.c.rej
delete mode 100644 arch/x86/boot/Makefile.rej
delete mode 100644 arch/x86/ia32/ia32entry.S.rej
delete mode 100644 arch/x86/include/asm/fpu-internal.h.rej
delete mode 100644 arch/x86/include/asm/paravirt_types.h.rej
delete mode 100644 arch/x86/include/asm/pgtable_64_types.h.rej
delete mode 100644 arch/x86/kernel/entry_32.S.rej
delete mode 100644 arch/x86/kernel/entry_64.S.rej
delete mode 100644 arch/x86/kernel/irq.c.rej
delete mode 100644 arch/x86/kernel/relocate_kernel_64.S.rej
delete mode 100644 arch/x86/kernel/setup.c.rej
delete mode 100644 arch/x86/kernel/sys_x86_64.c.rej
delete mode 100644 arch/x86/mm/fault.c.rej
delete mode 100644 arch/x86/mm/init.c.rej
delete mode 100644 arch/x86/mm/ioremap.c.rej
delete mode 100644 arch/x86/mm/mmap.c.rej
delete mode 100644 arch/x86/xen/xen-asm_32.S.rej
delete mode 100644 drivers/base/power/wakeup.c.rej
delete mode 100644 drivers/gpu/drm/drm_fops.c.rej
delete mode 100644 drivers/gpu/drm/i915/i915_gem_execbuffer.c.rej
delete mode 100644 drivers/gpu/drm/i915/intel_display.c.rej
delete mode 100644 drivers/staging/speakup/speakup_soft.c.rej
delete mode 100644 fs/binfmt_elf.c.rej
delete mode 100644 fs/compat_ioctl.c.rej
delete mode 100644 fs/libfs.c.rej
delete mode 100644 fs/nfs/inode.c.rej
delete mode 100644 fs/proc/nommu.c.rej
delete mode 100644 fs/proc/task_mmu.c.rej
delete mode 100644 fs/proc/task_nommu.c.rej
delete mode 100644 include/linux/efi.h.rej
delete mode 100644 include/linux/gfp.h.rej
delete mode 100644 include/linux/if_team.h.rej
delete mode 100644 include/linux/sysctl.h.rej
delete mode 100644 include/linux/vmalloc.h.rej
delete mode 100644 include/net/inetpeer.h.rej
delete mode 100644 include/sound/soc.h.rej
delete mode 100644 kernel/audit.c.rej
delete mode 100644 kernel/module.c.rej
delete mode 100644 kernel/power/process.c.rej
delete mode 100644 kernel/rcutree.h.rej
delete mode 100644 kernel/smp.c.rej
delete mode 100644 kernel/trace/trace_stack.c.rej
delete mode 100644 lib/bitmap.c.rej
delete mode 100644 mm/hugetlb.c.rej
delete mode 100644 mm/memory-failure.c.rej
delete mode 100644 mm/memory.c.rej
delete mode 100644 mm/mmap.c.rej
delete mode 100644 mm/swap.c.rej
delete mode 100644 net/bluetooth/hci_conn.c.rej
delete mode 100644 net/bluetooth/l2cap_core.c.rej
delete mode 100644 net/compat.c.rej
delete mode 100644 net/ipv4/inetpeer.c.rej
delete mode 100644 net/ipv4/ping.c.rej
delete mode 100644 net/ipv4/route.c.rej
delete mode 100644 net/ipv4/udp.c.rej
delete mode 100644 net/phonet/socket.c.rej
delete mode 100644 net/socket.c.rej
delete mode 100644 security/keys/compat.c.rej
delete mode 100644 security/keys/keyctl.c.rej
delete mode 100644 security/selinux/hooks.c.rej
delete mode 100644 sound/soc/soc-pcm.c.rej
delete mode 100644 sound/usb/card.h.rej
delete mode 100644 usr/gen_init_cpio.c.rej
diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h
index 621d737..8cc89ab 100644
--- a/arch/arm/include/asm/atomic.h
+++ b/arch/arm/include/asm/atomic.h
@@ -108,6 +108,42 @@ static inline int atomic_add_return(int i, atomic_t *v)
prefetchw(&v->counter);
__asm__ __volatile__("@ atomic_add_return\n"
+"1: ldrex %1, [%3]\n"
+" adds %0, %1, %4\n"
+
+#ifdef CONFIG_PAX_REFCOUNT
+" bvc 3f\n"
+" mov %0, %1\n"
+"2: bkpt 0xf103\n"
+"3:\n"
+#endif
+
+" strex %1, %0, [%3]\n"
+" teq %1, #0\n"
+" bne 1b"
+
+#ifdef CONFIG_PAX_REFCOUNT
+"\n4:\n"
+ _ASM_EXTABLE(2b, 4b)
+#endif
+
+ : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
+ : "r" (&v->counter), "Ir" (i)
+ : "cc");
+
+ smp_mb();
+
+ return result;
+}
+
+static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v)
+{
+ unsigned long tmp;
+ int result;
+
+ smp_mb();
+
+ __asm__ __volatile__("@ atomic_add_return_unchecked\n"
"1: ldrex %0, [%3]\n"
" add %0, %0, %4\n"
" strex %1, %0, [%3]\n"
@@ -176,11 +212,25 @@ static inline int atomic_sub_return(int i, atomic_t *v)
prefetchw(&v->counter);
__asm__ __volatile__("@ atomic_sub_return\n"
-"1: ldrex %0, [%3]\n"
-" sub %0, %0, %4\n"
+"1: ldrex %1, [%3]\n"
+" subs %0, %1, %4\n"
+
+#ifdef CONFIG_PAX_REFCOUNT
+" bvc 3f\n"
+" mov %0, %1\n"
+"2: bkpt 0xf103\n"
+"3:\n"
+#endif
+
" strex %1, %0, [%3]\n"
" teq %1, #0\n"
" bne 1b"
+
+#ifdef CONFIG_PAX_REFCOUNT
+"\n4:\n"
+ _ASM_EXTABLE(2b, 4b)
+#endif
+
: "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
: "r" (&v->counter), "Ir" (i)
: "cc");
@@ -213,6 +263,28 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
return oldval;
}
+static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *ptr, int old, int new)
+{
+ unsigned long oldval, res;
+
+ smp_mb();
+
+ do {
+ __asm__ __volatile__("@ atomic_cmpxchg_unchecked\n"
+ "ldrex %1, [%3]\n"
+ "mov %0, #0\n"
+ "teq %1, %4\n"
+ "strexeq %0, %5, [%3]\n"
+ : "=&r" (res), "=&r" (oldval), "+Qo" (ptr->counter)
+ : "r" (&ptr->counter), "Ir" (old), "r" (new)
+ : "cc");
+ } while (res);
+
+ smp_mb();
+
+ return oldval;
+}
+
static inline int __atomic_add_unless(atomic_t *v, int a, int u)
{
int oldval, newval;
@@ -302,6 +374,11 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
return ret;
}
+static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *v, int old, int new)
+{
+ return atomic_cmpxchg(v, old, new);
+}
+
static inline int __atomic_add_unless(atomic_t *v, int a, int u)
{
int c, old;
@@ -316,12 +393,33 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
#define atomic_xchg(v, new) (xchg(&((v)->counter), new))
+static inline int atomic_xchg_unchecked(atomic_unchecked_t *v, int new)
+{
+ return xchg(&v->counter, new);
+}
+
#define atomic_inc(v) atomic_add(1, v)
+static inline void atomic_inc_unchecked(atomic_unchecked_t *v)
+{
+ atomic_add_unchecked(1, v);
+}
#define atomic_dec(v) atomic_sub(1, v)
+static inline void atomic_dec_unchecked(atomic_unchecked_t *v)
+{
+ atomic_sub_unchecked(1, v);
+}
#define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0)
+static inline int atomic_inc_and_test_unchecked(atomic_unchecked_t *v)
+{
+ return atomic_add_return_unchecked(1, v) == 0;
+}
#define atomic_dec_and_test(v) (atomic_sub_return(1, v) == 0)
#define atomic_inc_return(v) (atomic_add_return(1, v))
+static inline int atomic_inc_return_unchecked(atomic_unchecked_t *v)
+{
+ return atomic_add_return_unchecked(1, v);
+}
#define atomic_dec_return(v) (atomic_sub_return(1, v))
#define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0)
@@ -337,6 +435,14 @@ typedef struct {
u64 __aligned(8) counter;
} atomic64_t;
+#ifdef CONFIG_PAX_REFCOUNT
+typedef struct {
+ u64 __aligned(8) counter;
+} atomic64_unchecked_t;
+#else
+typedef atomic64_t atomic64_unchecked_t;
+#endif
+
#define ATOMIC64_INIT(i) { (i) }
#ifdef CONFIG_ARM_LPAE
@@ -401,6 +507,20 @@ static inline void atomic64_set(atomic64_t *v, u64 i)
: "r" (&v->counter), "r" (i)
: "cc");
}
+
+static inline void atomic64_set_unchecked(atomic64_unchecked_t *v, u64 i)
+{
+ u64 tmp;
+
+ __asm__ __volatile__("@ atomic64_set_unchecked\n"
+"1: ldrexd %0, %H0, [%2]\n"
+" strexd %0, %3, %H3, [%2]\n"
+" teq %0, #0\n"
+" bne 1b"
+ : "=&r" (tmp), "=Qo" (v->counter)
+ : "r" (&v->counter), "r" (i)
+ : "cc");
+}
#endif
static inline void atomic64_add(u64 i, atomic64_t *v)
@@ -452,13 +572,50 @@ static inline void atomic64_add_unchecked(u64 i, atomic64_unchecked_t *v)
static inline u64 atomic64_add_return(u64 i, atomic64_t *v)
{
+ u64 result, tmp;
+
+ smp_mb();
+
+ __asm__ __volatile__("@ atomic64_add_return\n"
+"1: ldrexd %1, %H1, [%3]\n"
+" adds %0, %1, %4\n"
+" adcs %H0, %H1, %H4\n"
+
+#ifdef CONFIG_PAX_REFCOUNT
+" bvc 3f\n"
+" mov %0, %1\n"
+" mov %H0, %H1\n"
+"2: bkpt 0xf103\n"
+"3:\n"
+#endif
+
+" strexd %1, %0, %H0, [%3]\n"
+" teq %1, #0\n"
+" bne 1b"
+
+#ifdef CONFIG_PAX_REFCOUNT
+"\n4:\n"
+ _ASM_EXTABLE(2b, 4b)
+#endif
+
+ : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
+ : "r" (&v->counter), "r" (i)
+ : "cc");
+
+ smp_mb();
+
+ return result;
+}
+
+static inline u64 atomic64_add_return_unchecked(u64 i, atomic64_unchecked_t *v)
+{
u64 result;
unsigned long tmp;
smp_mb();
prefetchw(&v->counter);
- __asm__ __volatile__("@ atomic64_add_return\n"
+ __asm__ __volatile__("@ atomic64_add_return_unchecked\n"
"1: ldrexd %0, %H0, [%3]\n"
" adds %0, %0, %4\n"
" adc %H0, %H0, %H4\n"
@@ -482,7 +639,14 @@ static inline void atomic64_sub(u64 i, atomic64_t *v)
__asm__ __volatile__("@ atomic64_sub\n"
"1: ldrexd %0, %H0, [%3]\n"
" subs %0, %0, %4\n"
-" sbc %H0, %H0, %H4\n"
+" sbcs %H0, %H0, %H4\n"
+
+#ifdef CONFIG_PAX_REFCOUNT
+" bvc 3f\n"
+"2: bkpt 0xf103\n"
+"3:\n"
+#endif
+
" strexd %1, %0, %H0, [%3]\n"
" teq %1, #0\n"
" bne 1b"
@@ -491,15 +655,14 @@ static inline void atomic64_sub(u64 i, atomic64_t *v)
: "cc");
}
-static inline u64 atomic64_sub_return(u64 i, atomic64_t *v)
+static inline void atomic64_sub_unchecked(u64 i, atomic64_unchecked_t *v)
{
u64 result;
unsigned long tmp;
- smp_mb();
prefetchw(&v->counter);
- __asm__ __volatile__("@ atomic64_sub_return\n"
+ __asm__ __volatile__("@ atomic64_sub_unchecked\n"
"1: ldrexd %0, %H0, [%3]\n"
" subs %0, %0, %4\n"
" sbc %H0, %H0, %H4\n"
@@ -621,22 +784,35 @@ static inline u64 atomic64_xchg(atomic64_t *ptr, u64 new)
static inline u64 atomic64_dec_if_positive(atomic64_t *v)
{
- u64 result;
- unsigned long tmp;
+ u64 result, tmp;
smp_mb();
prefetchw(&v->counter);
__asm__ __volatile__("@ atomic64_dec_if_positive\n"
-"1: ldrexd %0, %H0, [%3]\n"
-" subs %0, %0, #1\n"
-" sbc %H0, %H0, #0\n"
+"1: ldrexd %1, %H1, [%3]\n"
+" subs %0, %1, #1\n"
+" sbcs %H0, %H1, #0\n"
+
+#ifdef CONFIG_PAX_REFCOUNT
+" bvc 3f\n"
+" mov %0, %1\n"
+" mov %H0, %H1\n"
+"2: bkpt 0xf103\n"
+"3:\n"
+#endif
+
" teq %H0, #0\n"
-" bmi 2f\n"
+" bmi 4f\n"
" strexd %1, %0, %H0, [%3]\n"
" teq %1, #0\n"
" bne 1b\n"
-"2:"
+"4:\n"
+
+#ifdef CONFIG_PAX_REFCOUNT
+ _ASM_EXTABLE(2b, 4b)
+#endif
+
: "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
: "r" (&v->counter)
: "cc");
diff --git a/arch/arm/include/asm/atomic.h.rej b/arch/arm/include/asm/atomic.h.rej
deleted file mode 100644
index 635cf3d..0000000
--- a/arch/arm/include/asm/atomic.h.rej
+++ /dev/null
@@ -1,321 +0,0 @@
-diff a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h (rejected hunks)
-@@ -60,6 +107,42 @@ static inline int atomic_add_return(int i, atomic_t *v)
- smp_mb();
-
- __asm__ __volatile__("@ atomic_add_return\n"
-+"1: ldrex %1, [%3]\n"
-+" adds %0, %1, %4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+" bvc 3f\n"
-+" mov %0, %1\n"
-+"2: bkpt 0xf103\n"
-+"3:\n"
-+#endif
-+
-+" strex %1, %0, [%3]\n"
-+" teq %1, #0\n"
-+" bne 1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+ _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+ : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-+ : "r" (&v->counter), "Ir" (i)
-+ : "cc");
-+
-+ smp_mb();
-+
-+ return result;
-+}
-+
-+static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v)
-+{
-+ unsigned long tmp;
-+ int result;
-+
-+ smp_mb();
-+
-+ __asm__ __volatile__("@ atomic_add_return_unchecked\n"
- "1: ldrex %0, [%3]\n"
- " add %0, %0, %4\n"
- " strex %1, %0, [%3]\n"
-@@ -98,11 +210,25 @@ static inline int atomic_sub_return(int i, atomic_t *v)
- smp_mb();
-
- __asm__ __volatile__("@ atomic_sub_return\n"
--"1: ldrex %0, [%3]\n"
--" sub %0, %0, %4\n"
-+"1: ldrex %1, [%3]\n"
-+" subs %0, %1, %4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+" bvc 3f\n"
-+" mov %0, %1\n"
-+"2: bkpt 0xf103\n"
-+"3:\n"
-+#endif
-+
- " strex %1, %0, [%3]\n"
- " teq %1, #0\n"
- " bne 1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+ _ASM_EXTABLE(2b, 4b)
-+#endif
-+
- : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
- : "r" (&v->counter), "Ir" (i)
- : "cc");
-@@ -134,6 +260,28 @@ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
- return oldval;
- }
-
-+static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *ptr, int old, int new)
-+{
-+ unsigned long oldval, res;
-+
-+ smp_mb();
-+
-+ do {
-+ __asm__ __volatile__("@ atomic_cmpxchg_unchecked\n"
-+ "ldrex %1, [%3]\n"
-+ "mov %0, #0\n"
-+ "teq %1, %4\n"
-+ "strexeq %0, %5, [%3]\n"
-+ : "=&r" (res), "=&r" (oldval), "+Qo" (ptr->counter)
-+ : "r" (&ptr->counter), "Ir" (old), "r" (new)
-+ : "cc");
-+ } while (res);
-+
-+ smp_mb();
-+
-+ return oldval;
-+}
-+
- static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
- {
- unsigned long tmp, tmp2;
-@@ -197,6 +359,11 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
- return ret;
- }
-
-+static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *v, int old, int new)
-+{
-+ return atomic_cmpxchg(v, old, new);
-+}
-+
- static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
- {
- unsigned long flags;
-@@ -209,6 +376,10 @@ static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr)
- #endif /* __LINUX_ARM_ARCH__ */
-
- #define atomic_xchg(v, new) (xchg(&((v)->counter), new))
-+static inline int atomic_xchg_unchecked(atomic_unchecked_t *v, int new)
-+{
-+ return xchg(&v->counter, new);
-+}
-
- static inline int __atomic_add_unless(atomic_t *v, int a, int u)
- {
-@@ -221,11 +392,27 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
- }
-
- #define atomic_inc(v) atomic_add(1, v)
-+static inline void atomic_inc_unchecked(atomic_unchecked_t *v)
-+{
-+ atomic_add_unchecked(1, v);
-+}
- #define atomic_dec(v) atomic_sub(1, v)
-+static inline void atomic_dec_unchecked(atomic_unchecked_t *v)
-+{
-+ atomic_sub_unchecked(1, v);
-+}
-
- #define atomic_inc_and_test(v) (atomic_add_return(1, v) == 0)
-+static inline int atomic_inc_and_test_unchecked(atomic_unchecked_t *v)
-+{
-+ return atomic_add_return_unchecked(1, v) == 0;
-+}
- #define atomic_dec_and_test(v) (atomic_sub_return(1, v) == 0)
- #define atomic_inc_return(v) (atomic_add_return(1, v))
-+static inline int atomic_inc_return_unchecked(atomic_unchecked_t *v)
-+{
-+ return atomic_add_return_unchecked(1, v);
-+}
- #define atomic_dec_return(v) (atomic_sub_return(1, v))
- #define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0)
-
-@@ -241,6 +428,14 @@ typedef struct {
- u64 __aligned(8) counter;
- } atomic64_t;
-
-+#ifdef CONFIG_PAX_REFCOUNT
-+typedef struct {
-+ u64 __aligned(8) counter;
-+} atomic64_unchecked_t;
-+#else
-+typedef atomic64_t atomic64_unchecked_t;
-+#endif
-+
- #define ATOMIC64_INIT(i) { (i) }
-
- static inline u64 atomic64_read(atomic64_t *v)
-@@ -270,6 +478,20 @@ static inline void atomic64_set(atomic64_t *v, u64 i)
- : "cc");
- }
-
-+static inline void atomic64_set_unchecked(atomic64_unchecked_t *v, u64 i)
-+{
-+ u64 tmp;
-+
-+ __asm__ __volatile__("@ atomic64_set_unchecked\n"
-+"1: ldrexd %0, %H0, [%2]\n"
-+" strexd %0, %3, %H3, [%2]\n"
-+" teq %0, #0\n"
-+" bne 1b"
-+ : "=&r" (tmp), "=Qo" (v->counter)
-+ : "r" (&v->counter), "r" (i)
-+ : "cc");
-+}
-+
- static inline void atomic64_add(u64 i, atomic64_t *v)
- {
- u64 result;
-@@ -289,12 +541,49 @@ static inline void atomic64_add(u64 i, atomic64_t *v)
-
- static inline u64 atomic64_add_return(u64 i, atomic64_t *v)
- {
-+ u64 result, tmp;
-+
-+ smp_mb();
-+
-+ __asm__ __volatile__("@ atomic64_add_return\n"
-+"1: ldrexd %1, %H1, [%3]\n"
-+" adds %0, %1, %4\n"
-+" adcs %H0, %H1, %H4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+" bvc 3f\n"
-+" mov %0, %1\n"
-+" mov %H0, %H1\n"
-+"2: bkpt 0xf103\n"
-+"3:\n"
-+#endif
-+
-+" strexd %1, %0, %H0, [%3]\n"
-+" teq %1, #0\n"
-+" bne 1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+ _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+ : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-+ : "r" (&v->counter), "r" (i)
-+ : "cc");
-+
-+ smp_mb();
-+
-+ return result;
-+}
-+
-+static inline u64 atomic64_add_return_unchecked(u64 i, atomic64_unchecked_t *v)
-+{
- u64 result;
- unsigned long tmp;
-
- smp_mb();
-
-- __asm__ __volatile__("@ atomic64_add_return\n"
-+ __asm__ __volatile__("@ atomic64_add_return_unchecked\n"
- "1: ldrexd %0, %H0, [%3]\n"
- " adds %0, %0, %4\n"
- " adc %H0, %H0, %H4\n"
-@@ -318,23 +607,34 @@ static inline void atomic64_sub(u64 i, atomic64_t *v)
- __asm__ __volatile__("@ atomic64_sub\n"
- "1: ldrexd %0, %H0, [%3]\n"
- " subs %0, %0, %4\n"
--" sbc %H0, %H0, %H4\n"
-+" sbcs %H0, %H0, %H4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+" bvc 3f\n"
-+"2: bkpt 0xf103\n"
-+"3:\n"
-+#endif
-+
- " strexd %1, %0, %H0, [%3]\n"
- " teq %1, #0\n"
- " bne 1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+ _ASM_EXTABLE(2b, 4b)
-+#endif
-+
- : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
- : "r" (&v->counter), "r" (i)
- : "cc");
- }
-
--static inline u64 atomic64_sub_return(u64 i, atomic64_t *v)
-+static inline void atomic64_sub_unchecked(u64 i, atomic64_unchecked_t *v)
- {
- u64 result;
- unsigned long tmp;
-
-- smp_mb();
--
-- __asm__ __volatile__("@ atomic64_sub_return\n"
-+ __asm__ __volatile__("@ atomic64_sub_unchecked\n"
- "1: ldrexd %0, %H0, [%3]\n"
- " subs %0, %0, %4\n"
- " sbc %H0, %H0, %H4\n"
-@@ -397,21 +754,34 @@ static inline u64 atomic64_xchg(atomic64_t *ptr, u64 new)
-
- static inline u64 atomic64_dec_if_positive(atomic64_t *v)
- {
-- u64 result;
-- unsigned long tmp;
-+ u64 result, tmp;
-
- smp_mb();
-
- __asm__ __volatile__("@ atomic64_dec_if_positive\n"
--"1: ldrexd %0, %H0, [%3]\n"
--" subs %0, %0, #1\n"
--" sbc %H0, %H0, #0\n"
-+"1: ldrexd %1, %H1, [%3]\n"
-+" subs %0, %1, #1\n"
-+" sbcs %H0, %H1, #0\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+" bvc 3f\n"
-+" mov %0, %1\n"
-+" mov %H0, %H1\n"
-+"2: bkpt 0xf103\n"
-+"3:\n"
-+#endif
-+
- " teq %H0, #0\n"
--" bmi 2f\n"
-+" bmi 4f\n"
- " strexd %1, %0, %H0, [%3]\n"
- " teq %1, #0\n"
- " bne 1b\n"
--"2:"
-+"4:\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+ _ASM_EXTABLE(2b, 4b)
-+#endif
-+
- : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
- : "r" (&v->counter)
- : "cc");
diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h
index ce6e306..5c9b3a1 100644
--- a/arch/arm/include/asm/elf.h
+++ b/arch/arm/include/asm/elf.h
@@ -126,10 +126,6 @@ int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
extern void elf_set_personality(const struct elf32_hdr *);
#define SET_PERSONALITY(ex) elf_set_personality(&(ex))
-struct mm_struct;
-extern unsigned long arch_randomize_brk(struct mm_struct *mm);
-#define arch_randomize_brk arch_randomize_brk
-
#ifdef CONFIG_MMU
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
struct linux_binprm;
diff --git a/arch/arm/include/asm/elf.h.rej b/arch/arm/include/asm/elf.h.rej
deleted file mode 100644
index 732816df6..0000000
--- a/arch/arm/include/asm/elf.h.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- arch/arm/include/asm/elf.h 2012-05-21 11:32:31.723926261 +0200
-+++ arch/arm/include/asm/elf.h 2012-05-21 12:10:08.424048829 +0200
-@@ -133,8 +140,4 @@ int dump_task_regs(struct task_struct *t
- extern void elf_set_personality(const struct elf32_hdr *);
- #define SET_PERSONALITY(ex) elf_set_personality(&(ex))
-
--struct mm_struct;
--extern unsigned long arch_randomize_brk(struct mm_struct *mm);
--#define arch_randomize_brk arch_randomize_brk
--
- #endif
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index c422585..07be50c 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -354,6 +354,7 @@ void machine_power_off(void)
if (pm_power_off)
pm_power_off();
+ BUG();
}
/*
@@ -367,7 +368,7 @@ void machine_power_off(void)
* executing pre-reset code, and using RAM that the primary CPU's code wishes
* to use. Implementing such co-ordination would be essentially impossible.
*/
-void machine_restart(char *cmd)
+__noreturn void machine_restart(char *cmd)
{
smp_send_stop();
diff --git a/arch/arm/kernel/process.c.rej b/arch/arm/kernel/process.c.rej
deleted file mode 100644
index 0b8d034..0000000
--- a/arch/arm/kernel/process.c.rej
+++ /dev/null
@@ -1,13 +0,0 @@
-diff a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c (rejected hunks)
-@@ -332,9 +331,10 @@ void machine_power_off(void)
- machine_shutdown();
- if (pm_power_off)
- pm_power_off();
-+ BUG();
- }
-
--void machine_restart(char *cmd)
-+__noreturn void machine_restart(char *cmd)
- {
- machine_shutdown();
-
diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
index 8dfb1ff..c04c68c 100644
--- a/arch/x86/boot/Makefile
+++ b/arch/x86/boot/Makefile
@@ -64,6 +64,9 @@ KBUILD_CFLAGS := $(LINUXINCLUDE) -m32 -g -Os -D_SETUP -D__KERNEL__ \
$(call cc-option, -fno-unit-at-a-time)) \
$(call cc-option, -fno-stack-protector) \
$(call cc-option, -mpreferred-stack-boundary=2)
+ifdef CONSTIFY_PLUGIN
+KBUILD_CFLAGS += $(CONSTIFY_PLUGIN) -fplugin-arg-constify_plugin-no-constify
+endif
KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
GCOV_PROFILE := n
diff --git a/arch/x86/boot/Makefile.rej b/arch/x86/boot/Makefile.rej
deleted file mode 100644
index f90340c..0000000
--- a/arch/x86/boot/Makefile.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- arch/x86/boot/Makefile 2012-05-21 11:32:56.723927619 +0200
-+++ arch/x86/boot/Makefile 2012-05-21 12:10:09.268048874 +0200
-@@ -64,6 +64,9 @@ KBUILD_CFLAGS := $(LINUXINCLUDE) -g -Os
- $(call cc-option, -fno-stack-protector) \
- $(call cc-option, -mpreferred-stack-boundary=2)
- KBUILD_CFLAGS += $(call cc-option, -m32)
-+ifdef CONSTIFY_PLUGIN
-+KBUILD_CFLAGS += $(CONSTIFY_PLUGIN) -fplugin-arg-constify_plugin-no-constify
-+endif
- KBUILD_AFLAGS := $(KBUILD_CFLAGS) -D__ASSEMBLY__
- GCOV_PROFILE := n
diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
index 6f3a5e3..3ca82b9 100644
--- a/arch/x86/ia32/ia32entry.S
+++ b/arch/x86/ia32/ia32entry.S
@@ -256,11 +256,12 @@ sysexit_from_sys_call:
1: setbe %al /* 1 if error, 0 if not */
movzbl %al,%edi /* zero-extend that into %edi */
call __audit_syscall_exit
+ GET_THREAD_INFO(%r11)
movq RAX-ARGOFFSET(%rsp),%rax /* reload syscall return value */
movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi
DISABLE_INTERRUPTS(CLBR_NONE)
TRACE_IRQS_OFF
- testl %edi,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
+ testl %edi,TI_flags(%r11)
jz \exit
CLEAR_RREGS -ARGOFFSET
jmp int_with_check
diff --git a/arch/x86/ia32/ia32entry.S.rej b/arch/x86/ia32/ia32entry.S.rej
deleted file mode 100644
index 164a807..0000000
--- a/arch/x86/ia32/ia32entry.S.rej
+++ /dev/null
@@ -1,16 +0,0 @@
---- arch/x86/ia32/ia32entry.S 2012-03-19 10:38:56.404050007 +0100
-+++ arch/x86/ia32/ia32entry.S 2012-05-21 12:10:09.300048875 +0200
-@@ -256,11 +299,12 @@ sysexit_from_sys_call:
- 1: setbe %al /* 1 if error, 0 if not */
- movzbl %al,%edi /* zero-extend that into %edi */
- call __audit_syscall_exit
-+ GET_THREAD_INFO(%r11)
- movq RAX-ARGOFFSET(%rsp),%rax /* reload syscall return value */
- movl $(_TIF_ALLWORK_MASK & ~_TIF_SYSCALL_AUDIT),%edi
- cli
- TRACE_IRQS_OFF
-- testl %edi,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
-+ testl %edi,TI_flags(%r11)
- jz \exit
- CLEAR_RREGS -ARGOFFSET
- jmp int_with_check
diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h
index 1da9ad0..19caec5 100644
--- a/arch/x86/include/asm/fpu-internal.h
+++ b/arch/x86/include/asm/fpu-internal.h
@@ -281,7 +281,7 @@ static inline int restore_fpu_checking(struct task_struct *tsk)
"fnclex\n\t"
"emms\n\t"
"fildl %P[addr]" /* set F?P to defined value */
- : : [addr] "m" (tsk->thread.fpu.has_fpu));
+ : : [addr] "m" (init_tss[smp_processor_id()].x86_tss.sp0));
}
return fpu_restore_checking(&tsk->thread.fpu);
diff --git a/arch/x86/include/asm/fpu-internal.h.rej b/arch/x86/include/asm/fpu-internal.h.rej
deleted file mode 100644
index 625c8ea..0000000
--- a/arch/x86/include/asm/fpu-internal.h.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- arch/x86/include/asm/fpu-internal.h 2012-05-21 11:32:56.839927625 +0200
-+++ arch/x86/include/asm/fpu-internal.h 2012-05-21 12:10:09.348048879 +0200
-@@ -281,7 +291,7 @@ static inline int restore_fpu_checking(s
- "emms\n\t" /* clear stack tags */
- "fildl %P[addr]", /* set F?P to defined value */
- X86_FEATURE_FXSAVE_LEAK,
-- [addr] "m" (tsk->thread.fpu.has_fpu));
-+ [addr] "m" (init_tss[smp_processor_id()].x86_tss.sp0));
-
- return fpu_restore_checking(&tsk->thread.fpu);
- }
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
index 8428be1..53d3344 100644
--- a/arch/x86/include/asm/paravirt_types.h
+++ b/arch/x86/include/asm/paravirt_types.h
@@ -84,7 +84,7 @@ struct pv_init_ops {
*/
unsigned (*patch)(u8 type, u16 clobber, void *insnbuf,
unsigned long addr, unsigned len);
-};
+} __no_const;
struct pv_lazy_ops {
@@ -92,13 +92,13 @@ struct pv_lazy_ops {
void (*enter)(void);
void (*leave)(void);
void (*flush)(void);
-};
+} __no_const;
struct pv_time_ops {
unsigned long long (*sched_clock)(void);
unsigned long long (*steal_clock)(int cpu);
unsigned long (*get_tsc_khz)(void);
-};
+} __no_const;
struct pv_cpu_ops {
/* hooks for various privileged instructions */
diff --git a/arch/x86/include/asm/paravirt_types.h.rej b/arch/x86/include/asm/paravirt_types.h.rej
deleted file mode 100644
index 72d0834..0000000
--- a/arch/x86/include/asm/paravirt_types.h.rej
+++ /dev/null
@@ -1,26 +0,0 @@
---- arch/x86/include/asm/paravirt_types.h 2011-10-24 12:48:26.123091780 +0200
-+++ arch/x86/include/asm/paravirt_types.h 2012-05-21 12:10:09.376048880 +0200
-@@ -84,20 +84,20 @@ struct pv_init_ops {
- */
- unsigned (*patch)(u8 type, u16 clobber, void *insnbuf,
- unsigned long addr, unsigned len);
--};
-+} __no_const;
-
-
- struct pv_lazy_ops {
- /* Set deferred update mode, used for batching operations. */
- void (*enter)(void);
- void (*leave)(void);
--};
-+} __no_const;
-
- struct pv_time_ops {
- unsigned long long (*sched_clock)(void);
- unsigned long long (*steal_clock)(int cpu);
- unsigned long (*get_tsc_khz)(void);
--};
-+} __no_const;
-
- struct pv_cpu_ops {
- /* hooks for various privileged instructions */
diff --git a/arch/x86/include/asm/pgtable_64_types.h b/arch/x86/include/asm/pgtable_64_types.h
index 51817fa..8c2c4e4 100644
--- a/arch/x86/include/asm/pgtable_64_types.h
+++ b/arch/x86/include/asm/pgtable_64_types.h
@@ -61,5 +61,10 @@ typedef struct { pteval_t pte; } pte_t;
#define MODULES_LEN (MODULES_END - MODULES_VADDR)
#define ESPFIX_PGD_ENTRY _AC(-2, UL)
#define ESPFIX_BASE_ADDR (ESPFIX_PGD_ENTRY << PGDIR_SHIFT)
+#define MODULES_EXEC_VADDR MODULES_VADDR
+#define MODULES_EXEC_END MODULES_END
+
+#define ktla_ktva(addr) (addr)
+#define ktva_ktla(addr) (addr)
#endif /* _ASM_X86_PGTABLE_64_DEFS_H */
diff --git a/arch/x86/include/asm/pgtable_64_types.h.rej b/arch/x86/include/asm/pgtable_64_types.h.rej
deleted file mode 100644
index 3bb8f29..0000000
--- a/arch/x86/include/asm/pgtable_64_types.h.rej
+++ /dev/null
@@ -1,13 +0,0 @@
---- arch/x86/include/asm/pgtable_64_types.h 2011-07-22 04:17:23.000000000 +0200
-+++ arch/x86/include/asm/pgtable_64_types.h 2012-05-21 12:10:09.388048880 +0200
-@@ -59,5 +59,10 @@ typedef struct { pteval_t pte; } pte_t;
- #define MODULES_VADDR _AC(0xffffffffa0000000, UL)
- #define MODULES_END _AC(0xffffffffff000000, UL)
- #define MODULES_LEN (MODULES_END - MODULES_VADDR)
-+#define MODULES_EXEC_VADDR MODULES_VADDR
-+#define MODULES_EXEC_END MODULES_END
-+
-+#define ktla_ktva(addr) (addr)
-+#define ktva_ktla(addr) (addr)
-
- #endif /* _ASM_X86_PGTABLE_64_DEFS_H */
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index 80cdf03..4b7eecc 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -878,25 +878,29 @@ syscall_exit_work:
movl %esp, %eax
call syscall_trace_leave
jmp resume_userspace
-END(syscall_exit_work)
+ENDPROC(syscall_exit_work)
CFI_ENDPROC
RING0_INT_FRAME # can't unwind into user space anyway
syscall_fault:
+#ifdef CONFIG_PAX_MEMORY_UDEREF
+ push %ss
+ pop %ds
+#endif
GET_THREAD_INFO(%ebp)
movl $-EFAULT,PT_EAX(%esp)
jmp resume_userspace
-END(syscall_fault)
+ENDPROC(syscall_fault)
syscall_badsys:
movl $-ENOSYS,%eax
jmp syscall_after_call
-END(syscall_badsys)
+ENDPROC(syscall_badsys)
sysenter_badsys:
movl $-ENOSYS,%eax
jmp sysenter_after_call
-END(syscall_badsys)
+ENDPROC(syscall_badsys) #This might not belong
CFI_ENDPROC
/*
* End of kprobes section
@@ -1639,13 +1643,16 @@ nmi_espfix_stack:
FIXUP_ESPFIX_STACK # %eax == %esp
xorl %edx,%edx # zero error code
call do_nmi
+
+ pax_exit_kernel
+
RESTORE_REGS
lss 12+4(%esp), %esp # back to espfix stack
CFI_ADJUST_CFA_OFFSET -24
jmp irq_return
#endif
CFI_ENDPROC
-END(nmi)
+ENDPROC(nmi)
ENTRY(int3)
RING0_INT_FRAME
diff --git a/arch/x86/kernel/entry_32.S.rej b/arch/x86/kernel/entry_32.S.rej
deleted file mode 100644
index 39bbe03..0000000
--- a/arch/x86/kernel/entry_32.S.rej
+++ /dev/null
@@ -1,47 +0,0 @@
---- arch/x86/kernel/entry_32.S 2012-05-21 11:32:57.475927660 +0200
-+++ arch/x86/kernel/entry_32.S 2012-05-21 12:10:09.520048888 +0200
-@@ -877,20 +1083,24 @@ syscall_exit_work:
- movl %esp, %eax
- call syscall_trace_leave
- jmp resume_userspace
--END(syscall_exit_work)
-+ENDPROC(syscall_exit_work)
- CFI_ENDPROC
-
- RING0_INT_FRAME # can't unwind into user space anyway
- syscall_fault:
-+#ifdef CONFIG_PAX_MEMORY_UDEREF
-+ push %ss
-+ pop %ds
-+#endif
- GET_THREAD_INFO(%ebp)
- movl $-EFAULT,PT_EAX(%esp)
- jmp resume_userspace
--END(syscall_fault)
-+ENDPROC(syscall_fault)
-
- syscall_badsys:
- movl $-ENOSYS,PT_EAX(%esp)
- jmp resume_userspace
--END(syscall_badsys)
-+ENDPROC(syscall_badsys)
- CFI_ENDPROC
- /*
- * End of kprobes section
-@@ -1625,12 +1878,15 @@ nmi_espfix_stack:
- FIXUP_ESPFIX_STACK # %eax == %esp
- xorl %edx,%edx # zero error code
- call do_nmi
-+
-+ pax_exit_kernel
-+
- RESTORE_REGS
- lss 12+4(%esp), %esp # back to espfix stack
- CFI_ADJUST_CFA_OFFSET -24
- jmp irq_return
- CFI_ENDPROC
--END(nmi)
-+ENDPROC(nmi)
-
- ENTRY(int3)
- RING0_INT_FRAME
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index d5e04292..3781f9d 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -1310,7 +1310,7 @@ ENTRY(retint_kernel)
jmp exit_intr
#endif
CFI_ENDPROC
-END(common_interrupt)
+ENDPROC(common_interrupt)
/*
* End of kprobes section
diff --git a/arch/x86/kernel/entry_64.S.rej b/arch/x86/kernel/entry_64.S.rej
deleted file mode 100644
index 9d787a754..0000000
--- a/arch/x86/kernel/entry_64.S.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- arch/x86/kernel/entry_64.S 2012-05-21 11:32:57.479927660 +0200
-+++ arch/x86/kernel/entry_64.S 2012-05-21 12:10:09.524048888 +0200
-@@ -1293,7 +1607,7 @@ ENTRY(retint_kernel)
- #endif
-
- CFI_ENDPROC
--END(common_interrupt)
-+ENDPROC(common_interrupt)
- /*
- * End of kprobes section
- */
diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
index 145b03af..3e707a2 100644
--- a/arch/x86/kernel/irq.c
+++ b/arch/x86/kernel/irq.c
@@ -164,7 +164,7 @@ u64 arch_irq_stat_cpu(unsigned int cpu)
u64 arch_irq_stat(void)
{
- u64 sum = atomic_read(&irq_err_count);
+ u64 sum = atomic_read_unchecked(&irq_err_count);
return sum;
}
diff --git a/arch/x86/kernel/irq.c.rej b/arch/x86/kernel/irq.c.rej
deleted file mode 100644
index a8779b5..0000000
--- a/arch/x86/kernel/irq.c.rej
+++ /dev/null
@@ -1,15 +0,0 @@
---- arch/x86/kernel/irq.c 2012-05-21 11:32:57.491927661 +0200
-+++ arch/x86/kernel/irq.c 2012-05-21 12:10:09.552048890 +0200
-@@ -164,10 +164,10 @@ u64 arch_irq_stat_cpu(unsigned int cpu)
-
- u64 arch_irq_stat(void)
- {
-- u64 sum = atomic_read(&irq_err_count);
-+ u64 sum = atomic_read_unchecked(&irq_err_count);
-
- #ifdef CONFIG_X86_IO_APIC
-- sum += atomic_read(&irq_mis_count);
-+ sum += atomic_read_unchecked(&irq_mis_count);
- #endif
- return sum;
- }
diff --git a/arch/x86/kernel/relocate_kernel_64.S b/arch/x86/kernel/relocate_kernel_64.S
index b5a911a..bed145d7 100644
--- a/arch/x86/kernel/relocate_kernel_64.S
+++ b/arch/x86/kernel/relocate_kernel_64.S
@@ -168,6 +168,7 @@ identity_mapped:
xorq %r14, %r14
xorq %r15, %r15
+ pax_force_retaddr 0, 1
ret
1:
diff --git a/arch/x86/kernel/relocate_kernel_64.S.rej b/arch/x86/kernel/relocate_kernel_64.S.rej
deleted file mode 100644
index 2ff6a6df..0000000
--- a/arch/x86/kernel/relocate_kernel_64.S.rej
+++ /dev/null
@@ -1,18 +0,0 @@
---- arch/x86/kernel/relocate_kernel_64.S 2011-10-24 12:48:26.271091772 +0200
-+++ arch/x86/kernel/relocate_kernel_64.S 2012-05-21 12:10:09.608048893 +0200
-@@ -161,13 +162,14 @@ identity_mapped:
- xorq %rbp, %rbp
- xorq %r8, %r8
- xorq %r9, %r9
-- xorq %r10, %r9
-+ xorq %r10, %r10
- xorq %r11, %r11
- xorq %r12, %r12
- xorq %r13, %r13
- xorq %r14, %r14
- xorq %r15, %r15
-
-+ pax_force_retaddr 0, 1
- ret
-
- 1:
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index e0723df..95fa25a 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -717,7 +717,7 @@ static void __init trim_bios_range(void)
* area (640->1Mb) as ram even though it is not.
* take them out.
*/
- e820_remove_range(BIOS_BEGIN, BIOS_END - BIOS_BEGIN, E820_RAM, 1);
+ e820_remove_range(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS, E820_RAM, 1);
sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
}
diff --git a/arch/x86/kernel/setup.c.rej b/arch/x86/kernel/setup.c.rej
deleted file mode 100644
index 27c0bc0..0000000
--- a/arch/x86/kernel/setup.c.rej
+++ /dev/null
@@ -1,10 +0,0 @@
---- arch/x86/kernel/setup.c 2012-05-21 11:32:57.635927669 +0200
-+++ arch/x86/kernel/setup.c 2012-05-21 12:10:09.608048893 +0200
-@@ -639,7 +639,7 @@ static void __init trim_bios_range(void)
- * area (640->1Mb) as ram even though it is not.
- * take them out.
- */
-- e820_remove_range(BIOS_BEGIN, BIOS_END - BIOS_BEGIN, E820_RAM, 1);
-+ e820_remove_range(ISA_START_ADDRESS, ISA_END_ADDRESS - ISA_START_ADDRESS, E820_RAM, 1);
- sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
- }
diff --git a/arch/x86/kernel/sys_x86_64.c.rej b/arch/x86/kernel/sys_x86_64.c.rej
deleted file mode 100644
index d74c3f9..0000000
--- a/arch/x86/kernel/sys_x86_64.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- arch/x86/kernel/sys_x86_64.c 2012-05-21 11:32:57.659927670 +0200
-+++ arch/x86/kernel/sys_x86_64.c 2012-05-21 12:10:09.624048894 +0200
-@@ -115,7 +115,7 @@ static void find_start_end(unsigned long
- *begin = new_begin;
- }
- } else {
-- *begin = TASK_UNMAPPED_BASE;
-+ *begin = mm->mmap_base;
- *end = TASK_SIZE;
- }
- }
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index e16e973..2d0f632 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -825,6 +825,22 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
return;
}
#endif
+
+#if defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC)
+ if (pax_is_fetch_fault(regs, error_code, address)) {
+
+#ifdef CONFIG_PAX_EMUTRAMP
+ switch (pax_handle_fetch_fault(regs)) {
+ case 2:
+ return;
+ }
+#endif
+
+ pax_report_fault(regs, (void *)regs->ip, (void *)regs->sp);
+ do_group_exit(SIGKILL);
+ }
+#endif
+
/* Kernel addresses are always protection faults: */
if (address >= TASK_SIZE)
error_code |= PF_PROT;
diff --git a/arch/x86/mm/fault.c.rej b/arch/x86/mm/fault.c.rej
deleted file mode 100644
index 51b534c..0000000
--- a/arch/x86/mm/fault.c.rej
+++ /dev/null
@@ -1,23 +0,0 @@
---- arch/x86/mm/fault.c 2012-05-21 11:32:57.831927679 +0200
-+++ arch/x86/mm/fault.c 2012-05-26 01:07:07.428801082 +0200
-@@ -824,6 +900,21 @@ __bad_area_nosemaphore(struct pt_regs *r
- }
- #endif
-
-+#if defined(CONFIG_PAX_PAGEEXEC) || defined(CONFIG_PAX_SEGMEXEC)
-+ if (pax_is_fetch_fault(regs, error_code, address)) {
-+
-+#ifdef CONFIG_PAX_EMUTRAMP
-+ switch (pax_handle_fetch_fault(regs)) {
-+ case 2:
-+ return;
-+ }
-+#endif
-+
-+ pax_report_fault(regs, (void *)regs->ip, (void *)regs->sp);
-+ do_group_exit(SIGKILL);
-+ }
-+#endif
-+
- if (unlikely(show_unhandled_signals))
- show_signal_msg(regs, error_code, address, tsk);
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 250a08c..01bfdea 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -44,7 +44,7 @@ struct map_range {
static void __init find_early_table_space(struct map_range *mr, int nr_range)
{
int i;
- unsigned long puds = 0, pmds = 0, ptes = 0, tables;
+ unsigned long puds = 0, pmds = 0, ptes = 0, tables, start = 0x100000, good_end = end;
unsigned long start = 0, good_end;
unsigned long pgd_extra = 0;
phys_addr_t base;
diff --git a/arch/x86/mm/init.c.rej b/arch/x86/mm/init.c.rej
deleted file mode 100644
index 24e81e8..0000000
--- a/arch/x86/mm/init.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- arch/x86/mm/init.c 2012-05-21 11:32:57.855927681 +0200
-+++ arch/x86/mm/init.c 2012-05-21 12:10:09.756048901 +0200
-@@ -33,7 +34,7 @@ int direct_gbpages
- static void __init find_early_table_space(unsigned long end, int use_pse,
- int use_gbpages)
- {
-- unsigned long puds, pmds, ptes, tables, start = 0, good_end = end;
-+ unsigned long puds, pmds, ptes, tables, start = 0x100000, good_end = end;
- phys_addr_t base;
-
- puds = (end + PUD_SIZE - 1) >> PUD_SHIFT;
diff --git a/arch/x86/mm/ioremap.c.rej b/arch/x86/mm/ioremap.c.rej
deleted file mode 100644
index 08d957c..0000000
--- a/arch/x86/mm/ioremap.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- arch/x86/mm/ioremap.c 2011-07-22 04:17:23.000000000 +0200
-+++ arch/x86/mm/ioremap.c 2012-05-21 12:10:09.760048901 +0200
-@@ -97,7 +97,7 @@ static void __iomem *__ioremap_caller(re
- for (pfn = phys_addr >> PAGE_SHIFT; pfn <= last_pfn; pfn++) {
- int is_ram = page_is_ram(pfn);
-
-- if (is_ram && pfn_valid(pfn) && !PageReserved(pfn_to_page(pfn)))
-+ if (is_ram && pfn_valid(pfn) && (pfn >= 0x100 || !PageReserved(pfn_to_page(pfn))))
- return NULL;
- WARN_ON_ONCE(is_ram);
- }
diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
index f8b50a1..6153cc6 100644
--- a/arch/x86/mm/mmap.c
+++ b/arch/x86/mm/mmap.c
@@ -126,10 +126,22 @@ static unsigned long mmap_legacy_base(struct mm_struct *mm)
void arch_pick_mmap_layout(struct mm_struct *mm)
{
mm->mmap_legacy_base = mmap_legacy_base();
- mm->mmap_base = mmap_base();
+ mm->mmap_base = mmap_base(mm);
+
+#ifdef CONFIG_PAX_RANDMMAP
+ if (mm->pax_flags & MF_PAX_RANDMMAP)
+ mm->mmap_base -= mm->delta_mmap + mm->delta_stack;
+#endif
+
if (mmap_is_legacy()) {
- mm->mmap_base = mm->mmap_legacy_base;
+ mm->mmap_base = mmap_legacy_base(mm);
+
+#ifdef CONFIG_PAX_RANDMMAP
+ if (mm->pax_flags & MF_PAX_RANDMMAP)
+ mm->mmap_base += mm->delta_mmap;
+#endif
+
mm->get_unmapped_area = arch_get_unmapped_area;
mm->unmap_area = arch_unmap_area;
} else {
diff --git a/arch/x86/mm/mmap.c.rej b/arch/x86/mm/mmap.c.rej
deleted file mode 100644
index 1a9121a..0000000
--- a/arch/x86/mm/mmap.c.rej
+++ /dev/null
@@ -1,28 +0,0 @@
---- arch/x86/mm/mmap.c 2012-03-19 10:38:56.692049991 +0100
-+++ arch/x86/mm/mmap.c 2012-05-21 12:10:09.764048901 +0200
-@@ -126,11 +139,23 @@ static unsigned long mmap_legacy_base(vo
- void arch_pick_mmap_layout(struct mm_struct *mm)
- {
- if (mmap_is_legacy()) {
-- mm->mmap_base = mmap_legacy_base();
-+ mm->mmap_base = mmap_legacy_base(mm);
-+
-+#ifdef CONFIG_PAX_RANDMMAP
-+ if (mm->pax_flags & MF_PAX_RANDMMAP)
-+ mm->mmap_base += mm->delta_mmap;
-+#endif
-+
- mm->get_unmapped_area = arch_get_unmapped_area;
- mm->unmap_area = arch_unmap_area;
- } else {
-- mm->mmap_base = mmap_base();
-+ mm->mmap_base = mmap_base(mm);
-+
-+#ifdef CONFIG_PAX_RANDMMAP
-+ if (mm->pax_flags & MF_PAX_RANDMMAP)
-+ mm->mmap_base -= mm->delta_mmap + mm->delta_stack;
-+#endif
-+
- mm->get_unmapped_area = arch_get_unmapped_area_topdown;
- mm->unmap_area = arch_unmap_area_topdown;
- }
diff --git a/arch/x86/xen/xen-asm_32.S b/arch/x86/xen/xen-asm_32.S
index 7328f71..c457aa7 100644
--- a/arch/x86/xen/xen-asm_32.S
+++ b/arch/x86/xen/xen-asm_32.S
@@ -83,14 +83,14 @@ ENTRY(xen_iret)
ESP_OFFSET=4 # bytes pushed onto stack
/*
- * Store vcpu_info pointer for easy access. Do it this way to
- * avoid having to reload %fs
+ * Store vcpu_info pointer for easy access.
*/
#ifdef CONFIG_SMP
- GET_THREAD_INFO(%eax)
- movl %ss:TI_cpu(%eax), %eax
- movl %ss:__per_cpu_offset(,%eax,4), %eax
- mov %ss:xen_vcpu(%eax), %eax
+ push %fs
+ mov $(__KERNEL_PERCPU), %eax
+ mov %eax, %fs
+ mov PER_CPU_VAR(xen_vcpu), %eax
+ pop %fs
#else
movl %ss:xen_vcpu, %eax
#endif
diff --git a/arch/x86/xen/xen-asm_32.S.rej b/arch/x86/xen/xen-asm_32.S.rej
deleted file mode 100644
index b3a8af9..0000000
--- a/arch/x86/xen/xen-asm_32.S.rej
+++ /dev/null
@@ -1,23 +0,0 @@
---- arch/x86/xen/xen-asm_32.S 2011-10-24 12:48:26.419091764 +0200
-+++ arch/x86/xen/xen-asm_32.S 2012-05-21 12:10:09.824048905 +0200
-@@ -83,14 +83,14 @@ ENTRY(xen_iret)
- ESP_OFFSET=4 # bytes pushed onto stack
-
- /*
-- * Store vcpu_info pointer for easy access. Do it this way to
-- * avoid having to reload %fs
-+ * Store vcpu_info pointer for easy access.
- */
- #ifdef CONFIG_SMP
-- GET_THREAD_INFO(%eax)
-- movl TI_cpu(%eax), %eax
-- movl __per_cpu_offset(,%eax,4), %eax
-- mov xen_vcpu(%eax), %eax
-+ push %fs
-+ mov $(__KERNEL_PERCPU), %eax
-+ mov %eax, %fs
-+ mov PER_CPU_VAR(xen_vcpu), %eax
-+ pop %fs
- #else
- movl xen_vcpu, %eax
- #endif
diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
index d87d93e..cdfcdbc 100644
--- a/drivers/base/power/wakeup.c
+++ b/drivers/base/power/wakeup.c
@@ -516,7 +516,7 @@ static void wakeup_source_deactivate(struct wakeup_source *ws)
* Increment the counter of registered wakeup events and decrement the
* couter of wakeup events in progress simultaneously.
*/
- cec = atomic_add_return(MAX_IN_PROGRESS, &combined_event_count);
+ cec = atomic_add_return_unchecked(MAX_IN_PROGRESS, &combined_event_count);
trace_wakeup_source_deactivate(ws->name, cec);
split_counters(&cnt, &inpr);
diff --git a/drivers/base/power/wakeup.c.rej b/drivers/base/power/wakeup.c.rej
deleted file mode 100644
index f0caa9b..0000000
--- a/drivers/base/power/wakeup.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- drivers/base/power/wakeup.c 2012-05-21 11:32:59.075927747 +0200
-+++ drivers/base/power/wakeup.c 2012-05-21 12:10:09.948048911 +0200
-@@ -475,7 +475,7 @@ static void wakeup_source_deactivate(str
- * Increment the counter of registered wakeup events and decrement the
- * couter of wakeup events in progress simultaneously.
- */
-- atomic_add(MAX_IN_PROGRESS, &combined_event_count);
-+ atomic_add_unchecked(MAX_IN_PROGRESS, &combined_event_count);
- }
-
- /**
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
index b09cbb5..d597f0b 100644
--- a/drivers/gpu/drm/drm_fops.c
+++ b/drivers/gpu/drm/drm_fops.c
@@ -138,8 +138,8 @@ int drm_open(struct inode *inode, struct file *filp)
retcode = drm_open_helper(inode, filp, dev);
if (!retcode) {
- atomic_inc(&dev->counts[_DRM_STAT_OPENS]);
- if (!dev->open_count++) {
+ atomic_inc_unchecked(&dev->counts[_DRM_STAT_OPENS]);
+ if (local_inc_return(&dev->open_count) == 1) {
retcode = drm_setup(dev);
if (retcode)
dev->open_count--;
diff --git a/drivers/gpu/drm/drm_fops.c.rej b/drivers/gpu/drm/drm_fops.c.rej
deleted file mode 100644
index c38ea83..0000000
--- a/drivers/gpu/drm/drm_fops.c.rej
+++ /dev/null
@@ -1,13 +0,0 @@
---- drivers/gpu/drm/drm_fops.c 2012-05-21 11:33:00.935927848 +0200
-+++ drivers/gpu/drm/drm_fops.c 2012-05-21 12:10:10.048048917 +0200
-@@ -138,8 +138,8 @@ int drm_open(struct inode *inode, struct
-
- retcode = drm_open_helper(inode, filp, dev);
- if (!retcode) {
-- atomic_inc(&dev->counts[_DRM_STAT_OPENS]);
-- if (!dev->open_count++)
-+ atomic_inc_unchecked(&dev->counts[_DRM_STAT_OPENS]);
-+ if (local_inc_return(&dev->open_count) == 1)
- retcode = drm_setup(dev);
- }
- if (!retcode) {
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index de46c99..90f7e4c 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -954,9 +954,9 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
static int
validate_exec_list(struct drm_i915_gem_exec_object2 *exec,
- int count)
+ unsigned int count)
{
- int i;
+ unsigned int i;
int relocs_total = 0;
int relocs_max = INT_MAX / sizeof(struct drm_i915_gem_relocation_entry);
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c.rej b/drivers/gpu/drm/i915/i915_gem_execbuffer.c.rej
deleted file mode 100644
index b147b40..0000000
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c.rej
+++ /dev/null
@@ -1,14 +0,0 @@
---- drivers/gpu/drm/i915/i915_gem_execbuffer.c 2012-05-21 11:33:01.339927870 +0200
-+++ drivers/gpu/drm/i915/i915_gem_execbuffer.c 2012-05-21 12:10:10.076048918 +0200
-@@ -933,9 +933,9 @@ i915_gem_check_execbuffer(struct drm_i91
-
- static int
- validate_exec_list(struct drm_i915_gem_exec_object2 *exec,
-- int count)
-+ unsigned int count)
- {
-- int i;
-+ unsigned int i;
-
- for (i = 0; i < count; i++) {
- char __user *ptr = (char __user *)(uintptr_t)exec[i].relocs_ptr;
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 915b222..852cbf7 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -7297,10 +7297,9 @@ static void do_intel_finish_page_flip(struct drm_device *dev,
obj = work->old_fb_obj;
- atomic_clear_mask(1 << intel_crtc->plane,
- &obj->pending_flip.counter);
-
- wake_up(&dev_priv->pending_flip_queue);
+ atomic_clear_mask_unchecked(1 << intel_crtc->plane, &obj->pending_flip);
+ if (atomic_read_unchecked(&obj->pending_flip) == 0)
+ wake_up(&dev_priv->pending_flip_queue);
schedule_work(&work->work);
trace_i915_flip_complete(intel_crtc->plane, work->pending_flip_obj);
@@ -7659,7 +7658,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
return 0;
cleanup_pending:
- atomic_sub(1 << intel_crtc->plane, &work->old_fb_obj->pending_flip);
+ atomic_sub_unchecked(1 << intel_crtc->plane, &work->old_fb_obj->pending_flip);
crtc->fb = old_fb;
drm_gem_object_unreference(&work->old_fb_obj->base);
drm_gem_object_unreference(&obj->base);
diff --git a/drivers/gpu/drm/i915/intel_display.c.rej b/drivers/gpu/drm/i915/intel_display.c.rej
deleted file mode 100644
index 8b5bc41..0000000
--- a/drivers/gpu/drm/i915/intel_display.c.rej
+++ /dev/null
@@ -1,32 +0,0 @@
---- drivers/gpu/drm/i915/intel_display.c 2012-06-11 19:12:28.596366966 +0200
-+++ drivers/gpu/drm/i915/intel_display.c 2012-07-04 19:33:49.496065642 +0200
-@@ -2919,7 +2919,7 @@ static void intel_crtc_wait_for_pending_
- obj = to_intel_framebuffer(crtc->fb)->obj;
- dev_priv = crtc->dev->dev_private;
- wait_event(dev_priv->pending_flip_queue,
-- atomic_read(&obj->pending_flip) == 0);
-+ atomic_read_unchecked(&obj->pending_flip) == 0);
- }
-
- static bool intel_crtc_driving_pch(struct drm_crtc *crtc)
-@@ -7284,9 +7284,8 @@ static void do_intel_finish_page_flip(st
-
- obj = work->old_fb_obj;
-
-- atomic_clear_mask(1 << intel_crtc->plane,
-- &obj->pending_flip.counter);
-- if (atomic_read(&obj->pending_flip) == 0)
-+ atomic_clear_mask_unchecked(1 << intel_crtc->plane, &obj->pending_flip);
-+ if (atomic_read_unchecked(&obj->pending_flip) == 0)
- wake_up(&dev_priv->pending_flip_queue);
-
- schedule_work(&work->work);
-@@ -7596,7 +7595,7 @@ static int intel_crtc_page_flip(struct d
- return 0;
-
- cleanup_pending:
-- atomic_sub(1 << intel_crtc->plane, &work->old_fb_obj->pending_flip);
-+ atomic_sub_unchecked(1 << intel_crtc->plane, &work->old_fb_obj->pending_flip);
- drm_gem_object_unreference(&work->old_fb_obj->base);
- drm_gem_object_unreference(&obj->base);
- mutex_unlock(&dev->struct_mutex);
diff --git a/drivers/staging/speakup/speakup_soft.c.rej b/drivers/staging/speakup/speakup_soft.c.rej
deleted file mode 100644
index 296a85f..0000000
--- a/drivers/staging/speakup/speakup_soft.c.rej
+++ /dev/null
@@ -1,15 +0,0 @@
---- drivers/staging/speakup/speakup_soft.c 2011-10-24 12:48:37.219091188 +0200
-+++ drivers/staging/speakup/speakup_soft.c 2012-05-21 12:10:10.868048961 +0200
-@@ -241,11 +241,11 @@ static ssize_t softsynth_read(struct fil
- break;
- } else if (!initialized) {
- if (*init) {
-- ch = *init;
- init++;
- } else {
- initialized = 1;
- }
-+ ch = *init;
- } else {
- ch = synth_buffer_getc();
- }
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index 46af0db..5432fe8 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -1210,6 +1210,20 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
#else
load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
#endif
+
+#ifdef CONFIG_PAX_RANDMMAP
+ /* PaX: randomize base address at the default exe base if requested */
+ if ((current->mm->pax_flags & MF_PAX_RANDMMAP) && elf_interpreter) {
+#ifdef CONFIG_SPARC64
+ load_bias = (pax_get_random_long() & ((1UL << PAX_DELTA_MMAP_LEN) - 1)) << (PAGE_SHIFT+1);
+#else
+ load_bias = (pax_get_random_long() & ((1UL << PAX_DELTA_MMAP_LEN) - 1)) << PAGE_SHIFT;
+#endif
+ load_bias = ELF_PAGESTART(PAX_ELF_ET_DYN_BASE - vaddr + load_bias);
+ elf_flags |= MAP_FIXED;
+ }
+#endif
+
total_size = total_mapping_size(elf_phdata,
loc->elf_ex.e_phnum);
if (!total_size) {
diff --git a/fs/binfmt_elf.c.rej b/fs/binfmt_elf.c.rej
deleted file mode 100644
index f60f6971..0000000
--- a/fs/binfmt_elf.c.rej
+++ /dev/null
@@ -1,22 +0,0 @@
-diff a/fs/binfmt_elf.c b/fs/binfmt_elf.c (rejected hunks)
-@@ -805,6 +1209,20 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
- #else
- load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
- #endif
-+
-+#ifdef CONFIG_PAX_RANDMMAP
-+ /* PaX: randomize base address at the default exe base if requested */
-+ if ((current->mm->pax_flags & MF_PAX_RANDMMAP) && elf_interpreter) {
-+#ifdef CONFIG_SPARC64
-+ load_bias = (pax_get_random_long() & ((1UL << PAX_DELTA_MMAP_LEN) - 1)) << (PAGE_SHIFT+1);
-+#else
-+ load_bias = (pax_get_random_long() & ((1UL << PAX_DELTA_MMAP_LEN) - 1)) << PAGE_SHIFT;
-+#endif
-+ load_bias = ELF_PAGESTART(PAX_ELF_ET_DYN_BASE - vaddr + load_bias);
-+ elf_flags |= MAP_FIXED;
-+ }
-+#endif
-+
- }
-
- error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c
index bf3be45..ef639f8 100644
--- a/fs/compat_ioctl.c
+++ b/fs/compat_ioctl.c
@@ -623,7 +623,7 @@ static int serial_struct_ioctl(unsigned fd, unsigned cmd,
return -EFAULT;
if (__get_user(udata, &ss32->iomem_base))
return -EFAULT;
- ss.iomem_base = compat_ptr(udata);
+ ss.iomem_base = (unsigned char __force_kernel *)compat_ptr(udata);
if (__get_user(ss.iomem_reg_shift, &ss32->iomem_reg_shift) ||
__get_user(ss.port_high, &ss32->port_high))
return -EFAULT;
@@ -798,7 +798,7 @@ static int compat_ioctl_preallocate(struct file *file,
copy_in_user(&p->l_len, &p32->l_len, sizeof(s64)) ||
copy_in_user(&p->l_sysid, &p32->l_sysid, sizeof(s32)) ||
copy_in_user(&p->l_pid, &p32->l_pid, sizeof(u32)) ||
- copy_in_user(&p->l_pad, &p32->l_pad, 4*sizeof(u32)))
+ copy_in_user(p->l_pad, &p32->l_pad, 4*sizeof(u32)))
return -EFAULT;
return ioctl_preallocate(file, p);
@@ -1613,8 +1613,8 @@ asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd,
static int __init init_sys32_ioctl_cmp(const void *p, const void *q)
{
unsigned int a, b;
- a = *(unsigned int *)p;
- b = *(unsigned int *)q;
+ a = *(const unsigned int *)p;
+ b = *(const unsigned int *)q;
if (a > b)
return 1;
if (a < b)
diff --git a/fs/compat_ioctl.c.rej b/fs/compat_ioctl.c.rej
deleted file mode 100644
index 6ac40a2..0000000
--- a/fs/compat_ioctl.c.rej
+++ /dev/null
@@ -1,40 +0,0 @@
---- fs/compat_ioctl.c 2012-05-21 11:33:34.635929678 +0200
-+++ fs/compat_ioctl.c 2012-05-21 12:10:11.084048973 +0200
-@@ -210,6 +210,8 @@ static int do_video_set_spu_palette(unsi
-
- err = get_user(palp, &up->palette);
- err |= get_user(length, &up->length);
-+ if (err)
-+ return -EFAULT;
-
- up_native = compat_alloc_user_space(sizeof(struct video_spu_palette));
- err = put_user(compat_ptr(palp), &up_native->palette);
-@@ -621,7 +623,7 @@ static int serial_struct_ioctl(unsigned
- return -EFAULT;
- if (__get_user(udata, &ss32->iomem_base))
- return -EFAULT;
-- ss.iomem_base = compat_ptr(udata);
-+ ss.iomem_base = (unsigned char __force_kernel *)compat_ptr(udata);
- if (__get_user(ss.iomem_reg_shift, &ss32->iomem_reg_shift) ||
- __get_user(ss.port_high, &ss32->port_high))
- return -EFAULT;
-@@ -796,7 +798,7 @@ static int compat_ioctl_preallocate(stru
- copy_in_user(&p->l_len, &p32->l_len, sizeof(s64)) ||
- copy_in_user(&p->l_sysid, &p32->l_sysid, sizeof(s32)) ||
- copy_in_user(&p->l_pid, &p32->l_pid, sizeof(u32)) ||
-- copy_in_user(&p->l_pad, &p32->l_pad, 4*sizeof(u32)))
-+ copy_in_user(p->l_pad, &p32->l_pad, 4*sizeof(u32)))
- return -EFAULT;
-
- return ioctl_preallocate(file, p);
-@@ -1610,8 +1612,8 @@ asmlinkage long compat_sys_ioctl(unsigne
- static int __init init_sys32_ioctl_cmp(const void *p, const void *q)
- {
- unsigned int a, b;
-- a = *(unsigned int *)p;
-- b = *(unsigned int *)q;
-+ a = *(const unsigned int *)p;
-+ b = *(const unsigned int *)q;
- if (a > b)
- return 1;
- if (a < b)
diff --git a/fs/libfs.c b/fs/libfs.c
index 83cee1c..abc00d3 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -165,6 +165,9 @@ int dcache_readdir(struct file * filp, void * dirent, filldir_t filldir)
for (p=q->next; p != &dentry->d_subdirs; p=p->next) {
struct dentry *next;
+ char d_name[sizeof(next->d_iname)];
+ const unsigned char *name;
+
next = list_entry(p, struct dentry, d_u.d_child);
spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
if (!simple_positive(next)) {
diff --git a/fs/libfs.c.rej b/fs/libfs.c.rej
deleted file mode 100644
index 8470aa1..0000000
--- a/fs/libfs.c.rej
+++ /dev/null
@@ -1,12 +0,0 @@
---- fs/libfs.c 2012-05-21 11:33:35.695929736 +0200
-+++ fs/libfs.c 2012-05-21 12:10:11.168048978 +0200
-@@ -165,6 +165,9 @@ int dcache_readdir(struct file * filp, v
-
- for (p=q->next; p != &dentry->d_subdirs; p=p->next) {
- struct dentry *next;
-+ char d_name[sizeof(next->d_iname)];
-+ const unsigned char *name;
-+
- next = list_entry(p, struct dentry, d_u.d_child);
- spin_lock_nested(&next->d_lock, DENTRY_D_LOCK_NESTED);
- if (!simple_positive(next)) {
diff --git a/fs/nfs/inode.c.rej b/fs/nfs/inode.c.rej
deleted file mode 100644
index 3928e5c..0000000
--- a/fs/nfs/inode.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- fs/nfs/inode.c 2012-05-21 11:33:35.907929747 +0200
-+++ fs/nfs/inode.c 2012-05-21 12:10:11.184048978 +0200
-@@ -152,7 +152,7 @@ static void nfs_zap_caches_locked(struct
- nfsi->attrtimeo = NFS_MINATTRTIMEO(inode);
- nfsi->attrtimeo_timestamp = jiffies;
-
-- memset(NFS_COOKIEVERF(inode), 0, sizeof(NFS_COOKIEVERF(inode)));
-+ memset(NFS_COOKIEVERF(inode), 0, sizeof(NFS_I(inode)->cookieverf));
- if (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))
- nfsi->cache_validity |= NFS_INO_INVALID_ATTR|NFS_INO_INVALID_DATA|NFS_INO_INVALID_ACCESS|NFS_INO_INVALID_ACL|NFS_INO_REVAL_PAGECACHE;
- else
diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c
index 501ae3a..c7a5528 100644
--- a/fs/proc/nommu.c
+++ b/fs/proc/nommu.c
@@ -64,7 +64,7 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region)
if (file) {
seq_pad(m, ' ');
- seq_path(m, &file->f_path, "");
+ seq_path(m, &file->f_path, "\n\\");
}
seq_putc(m, '\n');
diff --git a/fs/proc/nommu.c.rej b/fs/proc/nommu.c.rej
deleted file mode 100644
index 186828f..0000000
--- a/fs/proc/nommu.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- fs/proc/nommu.c 2011-07-22 04:17:23.000000000 +0200
-+++ fs/proc/nommu.c 2012-05-21 12:10:11.232048981 +0200
-@@ -66,7 +66,7 @@ static int nommu_region_show(struct seq_
- if (len < 1)
- len = 1;
- seq_printf(m, "%*c", len, ' ');
-- seq_path(m, &file->f_path, "");
-+ seq_path(m, &file->f_path, "\n\\");
- }
-
- seq_putc(m, '\n');
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index d44f967..6f08b99 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -283,21 +283,25 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
}
- /* We don't show the stack guard page in /proc/maps */
+
start = vma->vm_start;
- if (stack_guard_page_start(vma, start))
- start += PAGE_SIZE;
end = vma->vm_end;
- if (stack_guard_page_end(vma, end))
- end -= PAGE_SIZE;
seq_setwidth(m, 25 + sizeof(void *) * 6 - 1);
seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu ",
start,
end,
+
+#if 0
+ flags & VM_MAYREAD ? flags & VM_READ ? 'R' : '+' : flags & VM_READ ? 'r' : '-',
+ flags & VM_MAYWRITE ? flags & VM_WRITE ? 'W' : '+' : flags & VM_WRITE ? 'w' : '-',
+ flags & VM_MAYEXEC ? flags & VM_EXEC ? 'X' : '+' : flags & VM_EXEC ? 'x' : '-',
+#else
flags & VM_READ ? 'r' : '-',
flags & VM_WRITE ? 'w' : '-',
flags & VM_EXEC ? 'x' : '-',
+#endif
+
flags & VM_MAYSHARE ? 's' : 'p',
pgoff,
MAJOR(dev), MINOR(dev), ino);
@@ -308,7 +312,7 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
*/
if (file) {
seq_pad(m, ' ');
- seq_path(m, &file->f_path, "\n");
+ seq_path(m, &file->f_path, "\n\\");
goto done;
}
diff --git a/fs/proc/task_mmu.c.rej b/fs/proc/task_mmu.c.rej
deleted file mode 100644
index 0a6886b..0000000
--- a/fs/proc/task_mmu.c.rej
+++ /dev/null
@@ -1,39 +0,0 @@
---- fs/proc/task_mmu.c 2012-06-11 19:12:31.104367105 +0200
-+++ fs/proc/task_mmu.c 2012-06-11 19:17:09.188382567 +0200
-@@ -242,20 +253,23 @@ show_map_vma(struct seq_file *m, struct
- pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
- }
-
-- /* We don't show the stack guard page in /proc/maps */
- start = vma->vm_start;
-- if (stack_guard_page_start(vma, start))
-- start += PAGE_SIZE;
- end = vma->vm_end;
-- if (stack_guard_page_end(vma, end))
-- end -= PAGE_SIZE;
-
- seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu %n",
- start,
- end,
-+
-+#if 0
-+ flags & VM_MAYREAD ? flags & VM_READ ? 'R' : '+' : flags & VM_READ ? 'r' : '-',
-+ flags & VM_MAYWRITE ? flags & VM_WRITE ? 'W' : '+' : flags & VM_WRITE ? 'w' : '-',
-+ flags & VM_MAYEXEC ? flags & VM_EXEC ? 'X' : '+' : flags & VM_EXEC ? 'x' : '-',
-+#else
- flags & VM_READ ? 'r' : '-',
- flags & VM_WRITE ? 'w' : '-',
- flags & VM_EXEC ? 'x' : '-',
-+#endif
-+
- flags & VM_MAYSHARE ? 's' : 'p',
- pgoff,
- MAJOR(dev), MINOR(dev), ino, &len);
-@@ -266,7 +280,7 @@ show_map_vma(struct seq_file *m, struct
- */
- if (file) {
- pad_len_spaces(m, len);
-- seq_path(m, &file->f_path, "\n");
-+ seq_path(m, &file->f_path, "\n\\");
- goto done;
- }
diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
index 473f497..52cc71a 100644
--- a/fs/proc/task_nommu.c
+++ b/fs/proc/task_nommu.c
@@ -161,7 +161,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
if (file) {
seq_pad(m, ' ');
- seq_path(m, &file->f_path, "");
+ seq_path(m, &file->f_path, "\n\\");
} else if (mm) {
pid_t tid = vm_is_stack(priv->task, vma, is_pid);
diff --git a/fs/proc/task_nommu.c.rej b/fs/proc/task_nommu.c.rej
deleted file mode 100644
index 4757380..0000000
--- a/fs/proc/task_nommu.c.rej
+++ /dev/null
@@ -1,10 +0,0 @@
---- fs/proc/task_nommu.c 2012-05-21 11:33:36.239929765 +0200
-+++ fs/proc/task_nommu.c 2012-05-21 12:10:11.236048981 +0200
-@@ -168,7 +168,7 @@ static int nommu_vma_show(struct seq_fil
-
- if (file) {
- pad_len_spaces(m, len);
-- seq_path(m, &file->f_path, "");
-+ seq_path(m, &file->f_path, "\n\\");
- } else if (mm) {
- pid_t tid = vm_is_stack(priv->task, vma, is_pid);
diff --git a/include/linux/efi.h b/include/linux/efi.h
index 6bf8394..9f64717 100644
--- a/include/linux/efi.h
+++ b/include/linux/efi.h
@@ -665,7 +665,7 @@ struct efivar_operations {
efi_get_next_variable_t *get_next_variable;
efi_set_variable_t *set_variable;
efi_query_variable_store_t *query_variable_store;
-};
+} __no_const;
struct efivars {
/*
diff --git a/include/linux/efi.h.rej b/include/linux/efi.h.rej
deleted file mode 100644
index e4f1b70..0000000
--- a/include/linux/efi.h.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- include/linux/efi.h 2012-05-21 11:33:37.395929829 +0200
-+++ include/linux/efi.h 2012-05-21 12:10:11.384048989 +0200
-@@ -635,7 +635,7 @@ struct efivar_operations {
- efi_get_variable_t *get_variable;
- efi_get_next_variable_t *get_next_variable;
- efi_set_variable_t *set_variable;
--};
-+} __no_const;
-
- struct efivars {
- /*
diff --git a/include/linux/gfp.h.rej b/include/linux/gfp.h.rej
deleted file mode 100644
index 46a5762..0000000
--- a/include/linux/gfp.h.rej
+++ /dev/null
@@ -1,10 +0,0 @@
-diff a/include/linux/gfp.h b/include/linux/gfp.h (rejected hunks)
-@@ -97,7 +104,7 @@ struct vm_area_struct;
- */
- #define __GFP_NOTRACK_FALSE_POSITIVE (__GFP_NOTRACK)
-
--#define __GFP_BITS_SHIFT 25 /* Room for N __GFP_FOO bits */
-+#define __GFP_BITS_SHIFT 26 /* Room for N __GFP_FOO bits */
- #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1))
-
- /* This equals 0, but use constants in case they ever change */
diff --git a/include/linux/if_team.h b/include/linux/if_team.h
index 458a073..d89036e 100644
--- a/include/linux/if_team.h
+++ b/include/linux/if_team.h
@@ -113,7 +113,7 @@ struct team {
struct list_head option_list;
const struct team_mode *mode;
- struct team_mode_ops ops;
+ team_mode_ops_no_const ops;
bool port_mtu_change_allowed;
long mode_priv[TEAM_MODE_PRIV_LONGS];
};
diff --git a/include/linux/if_team.h.rej b/include/linux/if_team.h.rej
deleted file mode 100644
index 1641669..0000000
--- a/include/linux/if_team.h.rej
+++ /dev/null
@@ -1,10 +0,0 @@
---- include/linux/if_team.h 2012-03-19 10:39:10.972049232 +0100
-+++ include/linux/if_team.h 2012-05-21 12:10:11.452048993 +0200
-@@ -113,7 +114,7 @@ struct team {
- struct list_head option_list;
-
- const struct team_mode *mode;
-- struct team_mode_ops ops;
-+ team_mode_ops_no_const ops;
- long mode_priv[TEAM_MODE_PRIV_LONGS];
- };
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index d950b5c..3b79441 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -157,7 +157,11 @@ enum
KERN_COLD_BOOT = 78, /* int: identify if system cold booted */
};
-
+#ifdef CONFIG_PAX_SOFTMODE
+enum {
+ PAX_SOFTMODE=1 /* PaX: disable/enable soft mode */
+};
+#endif
/* CTL_VM names: */
enum
diff --git a/include/linux/sysctl.h.rej b/include/linux/sysctl.h.rej
deleted file mode 100644
index 910abfd..0000000
--- a/include/linux/sysctl.h.rej
+++ /dev/null
@@ -1,14 +0,0 @@
-diff a/include/linux/sysctl.h b/include/linux/sysctl.h (rejected hunks)
-@@ -156,7 +156,11 @@ enum
- KERN_BOOT_REASON = 77, /* int: identify reason system was booted */
- };
-
--
-+#ifdef CONFIG_PAX_SOFTMODE
-+enum {
-+ PAX_SOFTMODE=1 /* PaX: disable/enable soft mode */
-+};
-+#endif
-
- /* CTL_VM names: */
- enum
diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h
index 2553845..36fbb63 100644
--- a/include/linux/vmalloc.h
+++ b/include/linux/vmalloc.h
@@ -14,6 +14,11 @@ struct vm_area_struct; /* vma defining user mapping in mm_types.h */
#define VM_USERMAP 0x00000008 /* suitable for remap_vmalloc_range */
#define VM_VPAGES 0x00000010 /* buffer for pages was vmalloc'ed */
#define VM_UNLIST 0x00000020 /* vm_struct is not listed in vmlist */
+
+#if defined(CONFIG_MODULES) && defined(CONFIG_X86) && defined(CONFIG_PAX_KERNEXEC)
+#define VM_KERNEXEC 0x00000040 /* allocate from executable kernel memory range */
+#endif
+
#define VM_LOWMEM 0x00000040 /* Tracking of direct mapped lowmem */
/* bits [20..32] reserved for arch specific ioremap internals */
@@ -63,7 +68,7 @@ extern void *vmalloc_32_user(unsigned long size);
extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
extern void *__vmalloc_node_range(unsigned long size, unsigned long align,
unsigned long start, unsigned long end, gfp_t gfp_mask,
- pgprot_t prot, int node, const void *caller);
+ pgprot_t prot, int node, const void *caller) __size_overflow(1);
extern void vfree(const void *addr);
extern void *vmap(struct page **pages, unsigned int count,
diff --git a/include/linux/vmalloc.h.rej b/include/linux/vmalloc.h.rej
deleted file mode 100644
index 0e3c8fa..0000000
--- a/include/linux/vmalloc.h.rej
+++ /dev/null
@@ -1,23 +0,0 @@
---- include/linux/vmalloc.h 2012-03-19 10:39:11.388049209 +0100
-+++ include/linux/vmalloc.h 2012-05-22 15:28:31.531384607 +0200
-@@ -14,6 +14,11 @@ struct vm_area_struct; /* vma defining
- #define VM_USERMAP 0x00000008 /* suitable for remap_vmalloc_range */
- #define VM_VPAGES 0x00000010 /* buffer for pages was vmalloc'ed */
- #define VM_UNLIST 0x00000020 /* vm_struct is not listed in vmlist */
-+
-+#if defined(CONFIG_MODULES) && defined(CONFIG_X86) && defined(CONFIG_PAX_KERNEXEC)
-+#define VM_KERNEXEC 0x00000040 /* allocate from executable kernel memory range */
-+#endif
-+
- /* bits [20..32] reserved for arch specific ioremap internals */
-
- /*
-@@ -62,7 +67,7 @@ extern void *vmalloc_32_user(unsigned lo
- extern void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot);
- extern void *__vmalloc_node_range(unsigned long size, unsigned long align,
- unsigned long start, unsigned long end, gfp_t gfp_mask,
-- pgprot_t prot, int node, void *caller);
-+ pgprot_t prot, int node, void *caller) __size_overflow(1);
- extern void vfree(const void *addr);
-
- extern void *vmap(struct page **pages, unsigned int count,
diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h
index 2d64364..e617e3e 100644
--- a/include/net/inetpeer.h
+++ b/include/net/inetpeer.h
@@ -51,8 +51,8 @@ struct inet_peer {
*/
union {
struct {
- atomic_t rid; /* Frag reception counter */
- atomic_t ip_id_count; /* IP ID for the next packet */
+ atomic_unchecked_t rid; /* Frag reception counter */
+ atomic_unchecked_t ip_id_count; /* IP ID for the next packet */
__u32 tcp_ts;
__u32 tcp_ts_stamp;
};
diff --git a/include/net/inetpeer.h.rej b/include/net/inetpeer.h.rej
deleted file mode 100644
index 7a07598..0000000
--- a/include/net/inetpeer.h.rej
+++ /dev/null
@@ -1,26 +0,0 @@
---- include/net/inetpeer.h 2012-07-21 01:28:45.278708106 +0200
-+++ include/net/inetpeer.h 2012-07-21 01:28:56.938708446 +0200
-@@ -51,8 +51,8 @@ struct inet_peer {
- */
- union {
- struct {
-- atomic_t rid; /* Frag reception counter */
-- atomic_t ip_id_count; /* IP ID for the next packet */
-+ atomic_unchecked_t rid; /* Frag reception counter */
-+ atomic_unchecked_t ip_id_count; /* IP ID for the next packet */
- __u32 tcp_ts;
- __u32 tcp_ts_stamp;
- };
-@@ -118,11 +118,11 @@ static inline int inet_getid(struct inet
- more++;
- inet_peer_refcheck(p);
- do {
-- old = atomic_read(&p->ip_id_count);
-+ old = atomic_read_unchecked(&p->ip_id_count);
- new = old + more;
- if (!new)
- new = 1;
-- } while (atomic_cmpxchg(&p->ip_id_count, old, new) != old);
-+ } while (atomic_cmpxchg_unchecked(&p->ip_id_count, old, new) != old);
- return new;
- }
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 59b176f..5bb3fdd 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -779,7 +779,7 @@ struct snd_soc_platform_driver {
int (*write)(struct snd_soc_platform *, unsigned int, unsigned int);
int (*bespoke_trigger)(struct snd_pcm_substream *, int);
-};
+} __do_const;
struct snd_soc_platform {
const char *name;
diff --git a/include/sound/soc.h.rej b/include/sound/soc.h.rej
deleted file mode 100644
index b207cdf..0000000
--- a/include/sound/soc.h.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- include/sound/soc.h 2012-05-21 11:33:39.179929925 +0200
-+++ include/sound/soc.h 2012-05-21 12:10:11.664049005 +0200
-@@ -711,7 +711,7 @@ struct snd_soc_platform_driver {
- /* platform IO - used for platform DAPM */
- unsigned int (*read)(struct snd_soc_platform *, unsigned int);
- int (*write)(struct snd_soc_platform *, unsigned int, unsigned int);
--};
-+} __do_const;
-
- struct snd_soc_platform {
- const char *name;
diff --git a/kernel/audit.c b/kernel/audit.c
index a80d715..9762e8a 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -256,7 +256,7 @@ void audit_log_lost(const char *message)
printk(KERN_WARNING
"audit: audit_lost=%d audit_rate_limit=%d "
"audit_backlog_limit=%d\n",
- atomic_read(&audit_lost),
+ atomic_read_unchecked(&audit_lost),
audit_rate_limit,
audit_backlog_limit);
audit_panic(message);
diff --git a/kernel/audit.c.rej b/kernel/audit.c.rej
deleted file mode 100644
index 7a429c2..0000000
--- a/kernel/audit.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- kernel/audit.c 2012-05-21 11:33:39.347929934 +0200
-+++ kernel/audit.c 2012-05-21 12:10:11.704049007 +0200
-@@ -256,7 +256,7 @@ void audit_log_lost(const char *message)
- printk(KERN_WARNING
- "audit: audit_lost=%d audit_rate_limit=%d "
- "audit_backlog_limit=%d\n",
-- atomic_read(&audit_lost),
-+ atomic_read_unchecked(&audit_lost),
- audit_rate_limit,
- audit_backlog_limit);
- audit_panic(message);
diff --git a/kernel/module.c b/kernel/module.c
index 4199198..1e2ed11 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -3109,16 +3109,16 @@ SYSCALL_DEFINE3(init_module, void __user *, umod,
MODULE_STATE_COMING, mod);
/* Set RO and NX regions for core */
- set_section_ro_nx(mod->module_core,
- mod->core_text_size,
- mod->core_ro_size,
- mod->core_size);
+ set_section_ro_nx(mod->module_core_rx,
+ mod->core_size_rx,
+ mod->core_size_rx,
+ mod->core_size_rx);
/* Set RO and NX regions for init */
- set_section_ro_nx(mod->module_init,
- mod->init_text_size,
- mod->init_ro_size,
- mod->init_size);
+ set_section_ro_nx(mod->module_init_rx,
+ mod->init_size_rx,
+ mod->init_size_rx,
+ mod->init_size_rx);
do_mod_ctors(mod);
/* Start the module */
diff --git a/kernel/module.c.rej b/kernel/module.c.rej
deleted file mode 100644
index d5a4f7d..0000000
--- a/kernel/module.c.rej
+++ /dev/null
@@ -1,26 +0,0 @@
-diff a/kernel/module.c b/kernel/module.c (rejected hunks)
-@@ -3320,16 +3392,16 @@ SYSCALL_DEFINE3(init_module, void __user *, umod,
- #endif
-
- /* Set RO and NX regions for core */
-- set_section_ro_nx(mod->module_core,
-- mod->core_text_size,
-- mod->core_ro_size,
-- mod->core_size);
-+ set_section_ro_nx(mod->module_core_rx,
-+ mod->core_size_rx,
-+ mod->core_size_rx,
-+ mod->core_size_rx);
-
- /* Set RO and NX regions for init */
-- set_section_ro_nx(mod->module_init,
-- mod->init_text_size,
-- mod->init_ro_size,
-- mod->init_size);
-+ set_section_ro_nx(mod->module_init_rx,
-+ mod->init_size_rx,
-+ mod->init_size_rx,
-+ mod->init_size_rx);
-
- do_mod_ctors(mod);
- /* Start the module */
diff --git a/kernel/power/process.c b/kernel/power/process.c
index 8ec05f5..fed362a 100644
--- a/kernel/power/process.c
+++ b/kernel/power/process.c
@@ -36,6 +36,7 @@ static int try_to_freeze_tasks(bool user_only)
u64 elapsed_msecs64;
unsigned int elapsed_msecs;
bool wakeup = false;
+ bool timedout = false;
int sleep_usecs = USEC_PER_MSEC;
char suspend_abort[MAX_SUSPEND_ABORT_LEN];
@@ -80,7 +81,7 @@ static int try_to_freeze_tasks(bool user_only)
todo += wq_busy;
}
- if (!todo || time_after(jiffies, end_time))
+ if (!todo || timedout)
break;
if (pm_wakeup_pending()) {
diff --git a/kernel/power/process.c.rej b/kernel/power/process.c.rej
deleted file mode 100644
index d110847..0000000
--- a/kernel/power/process.c.rej
+++ /dev/null
@@ -1,19 +0,0 @@
---- kernel/power/process.c 2012-05-21 11:33:39.551929945 +0200
-+++ kernel/power/process.c 2012-05-21 12:10:11.796049012 +0200
-@@ -33,6 +33,7 @@ static int try_to_freeze_tasks(bool user
- u64 elapsed_csecs64;
- unsigned int elapsed_csecs;
- bool wakeup = false;
-+ bool timedout = false;
-
- do_gettimeofday(&start);
-
-@@ -75,7 +82,7 @@ static int try_to_freeze_tasks(bool user
- todo += wq_busy;
- }
-
-- if (!todo || time_after(jiffies, end_time))
-+ if (!todo || timedout)
- break;
-
- if (pm_wakeup_pending()) {
diff --git a/kernel/rcutree.h b/kernel/rcutree.h
index a178ac1..94beb76 100644
--- a/kernel/rcutree.h
+++ b/kernel/rcutree.h
@@ -87,7 +87,7 @@ struct rcu_dynticks {
long long dynticks_nesting; /* Track irq/process nesting level. */
/* Process level is worth LLONG_MAX/2. */
int dynticks_nmi_nesting; /* Track NMI nesting level. */
- atomic_t dynticks; /* Even value for idle, else odd. */
+ atomic_unchecked_t dynticks; /* Even value for idle, else odd. */
#ifdef CONFIG_RCU_FAST_NO_HZ
int dyntick_drain; /* Prepare-for-idle state variable. */
unsigned long dyntick_holdoff;
diff --git a/kernel/rcutree.h.rej b/kernel/rcutree.h.rej
deleted file mode 100644
index a05a1d5..0000000
--- a/kernel/rcutree.h.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- kernel/rcutree.h 2012-05-21 11:33:39.615929950 +0200
-+++ kernel/rcutree.h 2012-05-21 12:10:11.820049014 +0200
-@@ -87,7 +87,7 @@ struct rcu_dynticks {
- long long dynticks_nesting; /* Track irq/process nesting level. */
- /* Process level is worth LLONG_MAX/2. */
- int dynticks_nmi_nesting; /* Track NMI nesting level. */
-- atomic_t dynticks; /* Even value for idle, else odd. */
-+ atomic_unchecked_t dynticks;/* Even value for idle, else odd. */
- };
-
- /* RCU's kthread states for tracing. */
diff --git a/kernel/smp.c b/kernel/smp.c
index fcaaa42..6848980 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -471,22 +471,22 @@ int smp_call_function(smp_call_func_t func, void *info, int wait)
EXPORT_SYMBOL(smp_call_function);
#ifndef CONFIG_USE_GENERIC_SMP_HELPERS
-void ipi_call_lock(void)
+void ipi_call_lock(void) __acquires(call_function.lock)
{
raw_spin_lock(&call_function.lock);
}
-void ipi_call_unlock(void)
+void ipi_call_unlock(void) __releases(call_function.lock)
{
raw_spin_unlock(&call_function.lock);
}
-void ipi_call_lock_irq(void)
+void ipi_call_lock_irq(void) __acquires(call_function.lock)
{
raw_spin_lock_irq(&call_function.lock);
}
-void ipi_call_unlock_irq(void)
+void ipi_call_unlock_irq(void) __releases(call_function.lock)
{
raw_spin_unlock_irq(&call_function.lock);
}
diff --git a/kernel/smp.c.rej b/kernel/smp.c.rej
deleted file mode 100644
index 0067c8c..0000000
--- a/kernel/smp.c.rej
+++ /dev/null
@@ -1,28 +0,0 @@
-diff a/kernel/smp.c b/kernel/smp.c (rejected hunks)
-@@ -594,22 +594,22 @@ int smp_call_function(smp_call_func_t func, void *info, int wait)
- }
- EXPORT_SYMBOL(smp_call_function);
-
--void ipi_call_lock(void)
-+void ipi_call_lock(void) __acquires(call_function.lock)
- {
- raw_spin_lock(&call_function.lock);
- }
-
--void ipi_call_unlock(void)
-+void ipi_call_unlock(void) __releases(call_function.lock)
- {
- raw_spin_unlock(&call_function.lock);
- }
-
--void ipi_call_lock_irq(void)
-+void ipi_call_lock_irq(void) __acquires(call_function.lock)
- {
- raw_spin_lock_irq(&call_function.lock);
- }
-
--void ipi_call_unlock_irq(void)
-+void ipi_call_unlock_irq(void) __releases(call_function.lock)
- {
- raw_spin_unlock_irq(&call_function.lock);
- }
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index 8298997..88c977e 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -69,7 +69,7 @@ check_stack(unsigned long ip, unsigned long *stack)
return;
/* we do not handle interrupt stacks yet */
- if (!object_is_on_stack(stack))
+ if (!object_starts_on_stack(stack))
return;
local_irq_save(flags);
diff --git a/kernel/trace/trace_stack.c.rej b/kernel/trace/trace_stack.c.rej
deleted file mode 100644
index a6ab037..0000000
--- a/kernel/trace/trace_stack.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- kernel/trace/trace_stack.c 2012-03-19 10:39:11.988049175 +0100
-+++ kernel/trace/trace_stack.c 2012-05-21 12:10:11.900049018 +0200
-@@ -53,7 +53,7 @@ static inline void check_stack(void)
- return;
-
- /* we do not handle interrupt stacks yet */
-- if (!object_is_on_stack(&this_size))
-+ if (!object_starts_on_stack(&this_size))
- return;
-
- local_irq_save(flags);
diff --git a/lib/bitmap.c b/lib/bitmap.c
index 757b69e..088d207 100644
--- a/lib/bitmap.c
+++ b/lib/bitmap.c
@@ -604,7 +604,7 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
{
unsigned a, b;
int c, old_c, totaldigits;
- const char __user __force *ubuf = (const char __user __force *)buf;
+ const char __user *ubuf = (const char __force_user *)buf;
int at_start, in_range;
totaldigits = c = 0;
diff --git a/lib/bitmap.c.rej b/lib/bitmap.c.rej
deleted file mode 100644
index 750189f..0000000
--- a/lib/bitmap.c.rej
+++ /dev/null
@@ -1,10 +0,0 @@
-diff a/lib/bitmap.c b/lib/bitmap.c (rejected hunks)
-@@ -604,7 +604,7 @@ static int __bitmap_parselist(const char *buf, unsigned int buflen,
- {
- unsigned a, b;
- int c, old_c, totaldigits;
-- const char __user __force *ubuf = (const char __user __force *)buf;
-+ const char __user *ubuf = (const char __force_user *)buf;
- int exp_digit, in_range;
-
- totaldigits = c = 0;
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 6ad964d..ca2adb8 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -2829,6 +2829,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
struct hstate *h = hstate_vma(vma);
int need_wait_lock = 0;
+#ifdef CONFIG_PAX_SEGMEXEC
+ struct vm_area_struct *vma_m;
+#endif
+
address &= huge_page_mask(h);
ptep = huge_pte_offset(mm, address);
diff --git a/mm/hugetlb.c.rej b/mm/hugetlb.c.rej
deleted file mode 100644
index fb998d0..0000000
--- a/mm/hugetlb.c.rej
+++ /dev/null
@@ -1,12 +0,0 @@
-diff a/mm/hugetlb.c b/mm/hugetlb.c (rejected hunks)
-@@ -2814,6 +2844,10 @@ int hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
- static DEFINE_MUTEX(hugetlb_instantiation_mutex);
- struct hstate *h = hstate_vma(vma);
-
-+#ifdef CONFIG_PAX_SEGMEXEC
-+ struct vm_area_struct *vma_m;
-+#endif
-+
- address &= huge_page_mask(h);
-
- ptep = huge_pte_offset(mm, address);
diff --git a/mm/memory-failure.c b/mm/memory-failure.c
index 5727a5b..3c1349b 100644
--- a/mm/memory-failure.c
+++ b/mm/memory-failure.c
@@ -1070,7 +1070,7 @@ int memory_failure(unsigned long pfn, int trapno, int flags)
if (PageHWPoison(hpage)) {
if ((hwpoison_filter(p) && TestClearPageHWPoison(p))
|| (p != hpage && TestSetPageHWPoison(hpage))) {
- atomic_long_sub(nr_pages, &mce_bad_pages);
+ atomic_long_sub_unchecked(nr_pages, &mce_bad_pages);
unlock_page(hpage);
return 0;
}
@@ -1456,8 +1456,7 @@ static int soft_offline_huge_page(struct page *page, int flags)
/* overcommit hugetlb page will be freed to buddy */
if (PageHuge(hpage)) {
if (!PageHWPoison(hpage))
- atomic_long_add(1 << compound_trans_order(hpage),
- &mce_bad_pages);
+ atomic_long_add_unchecked(1 << compound_trans_order(hpage), &mce_bad_pages);
set_page_hwpoison_huge_page(hpage);
dequeue_hwpoisoned_huge_page(hpage);
} else {
diff --git a/mm/memory-failure.c.rej b/mm/memory-failure.c.rej
deleted file mode 100644
index 10a09a0..0000000
--- a/mm/memory-failure.c.rej
+++ /dev/null
@@ -1,20 +0,0 @@
---- mm/memory-failure.c 2012-08-09 20:18:52.153847491 +0200
-+++ mm/memory-failure.c 2012-08-09 20:19:06.153846744 +0200
-@@ -1068,7 +1068,7 @@ int memory_failure(unsigned long pfn, in
- if (!PageHWPoison(hpage)
- || (hwpoison_filter(p) && TestClearPageHWPoison(p))
- || (p != hpage && TestSetPageHWPoison(hpage))) {
-- atomic_long_sub(nr_pages, &mce_bad_pages);
-+ atomic_long_sub_unchecked(nr_pages, &mce_bad_pages);
- return 0;
- }
- set_page_hwpoison_huge_page(hpage);
-@@ -1448,7 +1448,7 @@ static int soft_offline_huge_page(struct
- }
- done:
- if (!PageHWPoison(hpage))
-- atomic_long_add(1 << compound_trans_order(hpage), &mce_bad_pages);
-+ atomic_long_add_unchecked(1 << compound_trans_order(hpage), &mce_bad_pages);
- set_page_hwpoison_huge_page(hpage);
- dequeue_hwpoisoned_huge_page(hpage);
- /* keep elevated page count for bad page */
diff --git a/mm/memory.c b/mm/memory.c
index 50a6c25..b5d8d5f 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -3370,40 +3370,6 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
}
/*
- * This is like a special single-page "expand_{down|up}wards()",
- * except we must first make sure that 'address{-|+}PAGE_SIZE'
- * doesn't hit another vma.
- */
-static inline int check_stack_guard_page(struct vm_area_struct *vma, unsigned long address)
-{
- address &= PAGE_MASK;
- if ((vma->vm_flags & VM_GROWSDOWN) && address == vma->vm_start) {
- struct vm_area_struct *prev = vma->vm_prev;
-
- /*
- * Is there a mapping abutting this one below?
- *
- * That's only ok if it's the same stack mapping
- * that has gotten split..
- */
- if (prev && prev->vm_end == address)
- return prev->vm_flags & VM_GROWSDOWN ? 0 : -ENOMEM;
-
- return expand_downwards(vma, address - PAGE_SIZE);
- }
- if ((vma->vm_flags & VM_GROWSUP) && address + PAGE_SIZE == vma->vm_end) {
- struct vm_area_struct *next = vma->vm_next;
-
- /* As VM_GROWSDOWN but s/below/above/ */
- if (next && next->vm_start == address + PAGE_SIZE)
- return next->vm_flags & VM_GROWSUP ? 0 : -ENOMEM;
-
- return expand_upwards(vma, address + PAGE_SIZE);
- }
- return 0;
-}
-
-/*
* We enter with non-exclusive mmap_sem (to exclude vma changes,
* but allow concurrent faults), and pte mapped but not yet locked.
* We return with mmap_sem still held, but pte unmapped and unlocked.
@@ -3412,27 +3378,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
unsigned long address, pte_t *page_table, pmd_t *pmd,
unsigned int flags)
{
- struct page *page;
+ struct page *page = NULL;
spinlock_t *ptl;
pte_t entry;
- pte_unmap(page_table);
-
- /* Check if we need to add a guard page to the stack */
- if (check_stack_guard_page(vma, address) < 0)
- return VM_FAULT_SIGSEGV;
-
- /* Use the zero-page for reads */
if (!(flags & FAULT_FLAG_WRITE)) {
entry = pte_mkspecial(pfn_pte(my_zero_pfn(address),
vma->vm_page_prot));
- page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
+ ptl = pte_lockptr(mm, pmd);
+ spin_lock(ptl);
if (!pte_none(*page_table))
goto unlock;
goto setpte;
}
/* Allocate our own private page. */
+ pte_unmap(page_table);
+
if (unlikely(anon_vma_prepare(vma)))
goto oom;
page = alloc_zeroed_user_highpage_movable(vma, address);
@@ -3876,7 +3838,7 @@ int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
* run pte_offset_map on the pmd, if an huge pmd could
* materialize from under us from a different thread.
*/
- if (unlikely(pmd_none(*pmd)) && __pte_alloc(mm, vma, pmd, address))
+ if (unlikely(pmd_none(*pmd) && __pte_alloc(mm, vma, pmd, address)))
return VM_FAULT_OOM;
/* if an huge pmd materialized from under us just retry later */
if (unlikely(pmd_trans_huge(*pmd)))
@@ -3913,6 +3875,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
spin_unlock(&mm->page_table_lock);
return 0;
}
+
+int __pud_alloc_kernel(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
+{
+ pud_t *new = pud_alloc_one(mm, address);
+ if (!new)
+ return -ENOMEM;
+
+ smp_wmb(); /* See comment in __pte_alloc */
+
+ spin_lock(&mm->page_table_lock);
+ if (pgd_present(*pgd)) /* Another has populated it */
+ pud_free(mm, new);
+ else
+ pgd_populate_kernel(mm, pgd, new);
+ spin_unlock(&mm->page_table_lock);
+ return 0;
+}
#endif /* __PAGETABLE_PUD_FOLDED */
#ifndef __PAGETABLE_PMD_FOLDED
@@ -3943,6 +3922,30 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
spin_unlock(&mm->page_table_lock);
return 0;
}
+
+int __pmd_alloc_kernel(struct mm_struct *mm, pud_t *pud, unsigned long address)
+{
+ pmd_t *new = pmd_alloc_one(mm, address);
+ if (!new)
+ return -ENOMEM;
+
+ smp_wmb(); /* See comment in __pte_alloc */
+
+ spin_lock(&mm->page_table_lock);
+#ifndef __ARCH_HAS_4LEVEL_HACK
+ if (pud_present(*pud)) /* Another has populated it */
+ pmd_free(mm, new);
+ else
+ pud_populate_kernel(mm, pud, new);
+#else
+ if (pgd_present(*pud)) /* Another has populated it */
+ pmd_free(mm, new);
+ else
+ pgd_populate_kernel(mm, pud, new);
+#endif /* __ARCH_HAS_4LEVEL_HACK */
+ spin_unlock(&mm->page_table_lock);
+ return 0;
+}
#endif /* __PAGETABLE_PMD_FOLDED */
int make_pages_present(unsigned long addr, unsigned long end)
@@ -3980,7 +3983,7 @@ static int __init gate_vma_init(void)
gate_vma.vm_start = FIXADDR_USER_START;
gate_vma.vm_end = FIXADDR_USER_END;
gate_vma.vm_flags = VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC;
- gate_vma.vm_page_prot = __P101;
+ gate_vma.vm_page_prot = vm_get_page_prot(gate_vma.vm_flags);
return 0;
}
diff --git a/mm/memory.c.rej b/mm/memory.c.rej
deleted file mode 100644
index b18c29f..0000000
--- a/mm/memory.c.rej
+++ /dev/null
@@ -1,149 +0,0 @@
---- mm/memory.c 2012-05-21 11:33:40.095929975 +0200
-+++ mm/memory.c 2012-05-21 12:10:11.964049021 +0200
-@@ -3276,40 +3493,6 @@ out_release:
- }
-
- /*
-- * This is like a special single-page "expand_{down|up}wards()",
-- * except we must first make sure that 'address{-|+}PAGE_SIZE'
-- * doesn't hit another vma.
-- */
--static inline int check_stack_guard_page(struct vm_area_struct *vma, unsigned long address)
--{
-- address &= PAGE_MASK;
-- if ((vma->vm_flags & VM_GROWSDOWN) && address == vma->vm_start) {
-- struct vm_area_struct *prev = vma->vm_prev;
--
-- /*
-- * Is there a mapping abutting this one below?
-- *
-- * That's only ok if it's the same stack mapping
-- * that has gotten split..
-- */
-- if (prev && prev->vm_end == address)
-- return prev->vm_flags & VM_GROWSDOWN ? 0 : -ENOMEM;
--
-- expand_downwards(vma, address - PAGE_SIZE);
-- }
-- if ((vma->vm_flags & VM_GROWSUP) && address + PAGE_SIZE == vma->vm_end) {
-- struct vm_area_struct *next = vma->vm_next;
--
-- /* As VM_GROWSDOWN but s/below/above/ */
-- if (next && next->vm_start == address + PAGE_SIZE)
-- return next->vm_flags & VM_GROWSUP ? 0 : -ENOMEM;
--
-- expand_upwards(vma, address + PAGE_SIZE);
-- }
-- return 0;
--}
--
--/*
- * We enter with non-exclusive mmap_sem (to exclude vma changes,
- * but allow concurrent faults), and pte mapped but not yet locked.
- * We return with mmap_sem still held, but pte unmapped and unlocked.
-@@ -3318,27 +3501,23 @@ static int do_anonymous_page(struct mm_s
- unsigned long address, pte_t *page_table, pmd_t *pmd,
- unsigned int flags)
- {
-- struct page *page;
-+ struct page *page = NULL;
- spinlock_t *ptl;
- pte_t entry;
-
-- pte_unmap(page_table);
--
-- /* Check if we need to add a guard page to the stack */
-- if (check_stack_guard_page(vma, address) < 0)
-- return VM_FAULT_SIGBUS;
--
-- /* Use the zero-page for reads */
- if (!(flags & FAULT_FLAG_WRITE)) {
- entry = pte_mkspecial(pfn_pte(my_zero_pfn(address),
- vma->vm_page_prot));
-- page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
-+ ptl = pte_lockptr(mm, pmd);
-+ spin_lock(ptl);
- if (!pte_none(*page_table))
- goto unlock;
- goto setpte;
- }
-
- /* Allocate our own private page. */
-+ pte_unmap(page_table);
-+
- if (unlikely(anon_vma_prepare(vma)))
- goto oom;
- page = alloc_zeroed_user_highpage_movable(vma, address);
-@@ -3798,7 +4040,7 @@ int handle_mm_fault(struct mm_struct *mm
- * run pte_offset_map on the pmd, if an huge pmd could
- * materialize from under us from a different thread.
- */
-- if (unlikely(pmd_none(*pmd)) && __pte_alloc(mm, vma, pmd, address))
-+ if (unlikely(pmd_none(*pmd) && __pte_alloc(mm, vma, pmd, address)))
- return VM_FAULT_OOM;
- /* if an huge pmd materialized from under us just retry later */
- if (unlikely(pmd_trans_huge(*pmd)))
-@@ -3835,6 +4077,23 @@ int __pud_alloc(struct mm_struct *mm, pg
- spin_unlock(&mm->page_table_lock);
- return 0;
- }
-+
-+int __pud_alloc_kernel(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
-+{
-+ pud_t *new = pud_alloc_one(mm, address);
-+ if (!new)
-+ return -ENOMEM;
-+
-+ smp_wmb(); /* See comment in __pte_alloc */
-+
-+ spin_lock(&mm->page_table_lock);
-+ if (pgd_present(*pgd)) /* Another has populated it */
-+ pud_free(mm, new);
-+ else
-+ pgd_populate_kernel(mm, pgd, new);
-+ spin_unlock(&mm->page_table_lock);
-+ return 0;
-+}
- #endif /* __PAGETABLE_PUD_FOLDED */
-
- #ifndef __PAGETABLE_PMD_FOLDED
-@@ -3865,6 +4124,30 @@ int __pmd_alloc(struct mm_struct *mm, pu
- spin_unlock(&mm->page_table_lock);
- return 0;
- }
-+
-+int __pmd_alloc_kernel(struct mm_struct *mm, pud_t *pud, unsigned long address)
-+{
-+ pmd_t *new = pmd_alloc_one(mm, address);
-+ if (!new)
-+ return -ENOMEM;
-+
-+ smp_wmb(); /* See comment in __pte_alloc */
-+
-+ spin_lock(&mm->page_table_lock);
-+#ifndef __ARCH_HAS_4LEVEL_HACK
-+ if (pud_present(*pud)) /* Another has populated it */
-+ pmd_free(mm, new);
-+ else
-+ pud_populate_kernel(mm, pud, new);
-+#else
-+ if (pgd_present(*pud)) /* Another has populated it */
-+ pmd_free(mm, new);
-+ else
-+ pgd_populate_kernel(mm, pud, new);
-+#endif /* __ARCH_HAS_4LEVEL_HACK */
-+ spin_unlock(&mm->page_table_lock);
-+ return 0;
-+}
- #endif /* __PAGETABLE_PMD_FOLDED */
-
- int make_pages_present(unsigned long addr, unsigned long end)
-@@ -3902,7 +4185,7 @@ static int __init gate_vma_init(void)
- gate_vma.vm_start = FIXADDR_USER_START;
- gate_vma.vm_end = FIXADDR_USER_END;
- gate_vma.vm_flags = VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC;
-- gate_vma.vm_page_prot = __P101;
-+ gate_vma.vm_page_prot = vm_get_page_prot(gate_vma.vm_flags);
-
- return 0;
- }
diff --git a/mm/mmap.c b/mm/mmap.c
index c2eb66c..acccaf4 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -747,6 +747,12 @@ can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff,
const char __user *anon_name)
{
+
+#ifdef CONFIG_PAX_SEGMEXEC
+ if ((vma->vm_mm->pax_flags & MF_PAX_SEGMEXEC) && vma->vm_start == SEGMEXEC_TASK_SIZE)
+ return 0;
+#endif
+
if (is_mergeable_vma(vma, file, vm_flags, anon_name) &&
is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
if (vma->vm_pgoff == vm_pgoff)
@@ -767,6 +773,12 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff,
const char __user *anon_name)
{
+
+#ifdef CONFIG_PAX_SEGMEXEC
+ if ((vma->vm_mm->pax_flags & MF_PAX_SEGMEXEC) && vma->vm_end == SEGMEXEC_TASK_SIZE)
+ return 0;
+#endif
+
if (is_mergeable_vma(vma, file, vm_flags, anon_name) &&
is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
pgoff_t vm_pglen;
@@ -817,6 +829,13 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
struct vm_area_struct *area, *next;
int err;
+#ifdef CONFIG_PAX_SEGMEXEC
+ unsigned long addr_m = addr + SEGMEXEC_TASK_SIZE, end_m = end + SEGMEXEC_TASK_SIZE;
+ struct vm_area_struct *area_m = NULL, *next_m = NULL, *prev_m = NULL;
+
+ BUG_ON((mm->pax_flags & MF_PAX_SEGMEXEC) && SEGMEXEC_TASK_SIZE < end);
+#endif
+
/*
* We later require that vma->vm_flags == vm_flags,
* so this tests vma->vm_flags & VM_SPECIAL, too.
@@ -891,12 +910,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
mpol_equal(policy, vma_policy(next)) &&
can_vma_merge_before(next, vm_flags, anon_vma,
file, pgoff+pglen, anon_name)) {
- if (prev && addr < prev->vm_end) /* case 4 */
+ if (prev && addr < prev->vm_end) { /* case 4 */
err = vma_adjust(prev, prev->vm_start,
addr, prev->vm_pgoff, NULL);
- else /* cases 3, 8 */
+
+#ifdef CONFIG_PAX_SEGMEXEC
+ if (!err && prev_m)
+ err = vma_adjust(prev_m, prev_m->vm_start,
+ addr_m, prev_m->vm_pgoff, NULL);
+#endif
+
+ } else { /* cases 3, 8 */
err = vma_adjust(area, addr, next->vm_end,
next->vm_pgoff - pglen, NULL);
+
+#ifdef CONFIG_PAX_SEGMEXEC
+ if (!err && area_m)
+ err = vma_adjust(area_m, addr_m, next_m->vm_end,
+ next_m->vm_pgoff - pglen, NULL);
+#endif
+
+ }
if (err)
return NULL;
khugepaged_enter_vma_merge(area, vm_flags);
@@ -2109,11 +2143,22 @@ int expand_downwards(struct vm_area_struct *vma,
if (!error) {
vma->vm_start = address;
vma->vm_pgoff -= grow;
+ track_exec_limit(vma->vm_mm, vma->vm_start, vma->vm_end, vma->vm_flags);
+
+#ifdef CONFIG_PAX_SEGMEXEC
+ if (vma_m) {
+ vma_m->vm_start -= grow << PAGE_SHIFT;
+ vma_m->vm_pgoff -= grow;
+ }
+#endif
+
perf_event_mmap(vma);
}
}
}
vma_unlock_anon_vma(vma);
+ if (lockprev)
+ vma_unlock_anon_vma(prev);
khugepaged_enter_vma_merge(vma, vma->vm_flags);
return error;
}
diff --git a/mm/mmap.c.rej b/mm/mmap.c.rej
deleted file mode 100644
index 3979d2d..0000000
--- a/mm/mmap.c.rej
+++ /dev/null
@@ -1,103 +0,0 @@
---- mm/mmap.c 2012-05-21 11:33:40.107929975 +0200
-+++ mm/mmap.c 2012-05-22 16:53:56.195111150 +0200
-@@ -711,6 +732,12 @@ static int
- can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
- struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff)
- {
-+
-+#ifdef CONFIG_PAX_SEGMEXEC
-+ if ((vma->vm_mm->pax_flags & MF_PAX_SEGMEXEC) && vma->vm_start == SEGMEXEC_TASK_SIZE)
-+ return 0;
-+#endif
-+
- if (is_mergeable_vma(vma, file, vm_flags) &&
- is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
- if (vma->vm_pgoff == vm_pgoff)
-@@ -730,6 +757,12 @@ static int
- can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
- struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff)
- {
-+
-+#ifdef CONFIG_PAX_SEGMEXEC
-+ if ((vma->vm_mm->pax_flags & MF_PAX_SEGMEXEC) && vma->vm_end == SEGMEXEC_TASK_SIZE)
-+ return 0;
-+#endif
-+
- if (is_mergeable_vma(vma, file, vm_flags) &&
- is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
- pgoff_t vm_pglen;
-@@ -772,13 +805,20 @@ can_vma_merge_after(struct vm_area_struc
- struct vm_area_struct *vma_merge(struct mm_struct *mm,
- struct vm_area_struct *prev, unsigned long addr,
- unsigned long end, unsigned long vm_flags,
-- struct anon_vma *anon_vma, struct file *file,
-+ struct anon_vma *anon_vma, struct file *file,
- pgoff_t pgoff, struct mempolicy *policy)
- {
- pgoff_t pglen = (end - addr) >> PAGE_SHIFT;
- struct vm_area_struct *area, *next;
- int err;
-
-+#ifdef CONFIG_PAX_SEGMEXEC
-+ unsigned long addr_m = addr + SEGMEXEC_TASK_SIZE, end_m = end + SEGMEXEC_TASK_SIZE;
-+ struct vm_area_struct *area_m = NULL, *next_m = NULL, *prev_m = NULL;
-+
-+ BUG_ON((mm->pax_flags & MF_PAX_SEGMEXEC) && SEGMEXEC_TASK_SIZE < end);
-+#endif
-+
- /*
- * We later require that vma->vm_flags == vm_flags,
- * so this tests vma->vm_flags & VM_SPECIAL, too.
-@@ -853,12 +917,27 @@ struct vm_area_struct *vma_merge(struct
- mpol_equal(policy, vma_policy(next)) &&
- can_vma_merge_before(next, vm_flags,
- anon_vma, file, pgoff+pglen)) {
-- if (prev && addr < prev->vm_end) /* case 4 */
-+ if (prev && addr < prev->vm_end) { /* case 4 */
- err = vma_adjust(prev, prev->vm_start,
- addr, prev->vm_pgoff, NULL);
-- else /* cases 3, 8 */
-+
-+#ifdef CONFIG_PAX_SEGMEXEC
-+ if (!err && prev_m)
-+ err = vma_adjust(prev_m, prev_m->vm_start,
-+ addr_m, prev_m->vm_pgoff, NULL);
-+#endif
-+
-+ } else { /* cases 3, 8 */
- err = vma_adjust(area, addr, next->vm_end,
- next->vm_pgoff - pglen, NULL);
-+
-+#ifdef CONFIG_PAX_SEGMEXEC
-+ if (!err && area_m)
-+ err = vma_adjust(area_m, addr_m, next_m->vm_end,
-+ next_m->vm_pgoff - pglen, NULL);
-+#endif
-+
-+ }
- if (err)
- return NULL;
- khugepaged_enter_vma_merge(area);
-@@ -2050,11 +2314,22 @@ int expand_downwards(struct vm_area_stru
- if (!error) {
- vma->vm_start = address;
- vma->vm_pgoff -= grow;
-+ track_exec_limit(vma->vm_mm, vma->vm_start, vma->vm_end, vma->vm_flags);
-+
-+#ifdef CONFIG_PAX_SEGMEXEC
-+ if (vma_m) {
-+ vma_m->vm_start -= grow << PAGE_SHIFT;
-+ vma_m->vm_pgoff -= grow;
-+ }
-+#endif
-+
- perf_event_mmap(vma);
- }
- }
- }
- vma_unlock_anon_vma(vma);
-+ if (lockprev)
-+ vma_unlock_anon_vma(prev);
- khugepaged_enter_vma_merge(vma);
- return error;
- }
diff --git a/mm/swap.c b/mm/swap.c
index f689e9a..4a937cf 100644
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -72,6 +72,8 @@ static void __put_compound_page(struct page *page)
if (!PageHuge(page))
__page_cache_release(page);
dtor = get_compound_page_dtor(page);
+ if (!PageHuge(page))
+ BUG_ON(dtor != free_compound_page);
(*dtor)(page);
}
diff --git a/mm/swap.c.rej b/mm/swap.c.rej
deleted file mode 100644
index f011efb..0000000
--- a/mm/swap.c.rej
+++ /dev/null
@@ -1,18 +0,0 @@
---- mm/swap.c 2012-05-21 11:33:40.171929979 +0200
-+++ mm/swap.c 2012-05-21 12:10:12.044049025 +0200
-@@ -30,6 +30,7 @@
- #include <linux/backing-dev.h>
- #include <linux/memcontrol.h>
- #include <linux/gfp.h>
-+#include <linux/hugetlb.h>
-
- #include "internal.h"
-
-@@ -70,6 +71,8 @@ static void __put_compound_page(struct p
-
- __page_cache_release(page);
- dtor = get_compound_page_dtor(page);
-+ if (!PageHuge(page))
-+ BUG_ON(dtor != free_compound_page);
- (*dtor)(page);
- }
diff --git a/net/bluetooth/hci_conn.c.rej b/net/bluetooth/hci_conn.c.rej
deleted file mode 100644
index bd8d5ef..0000000
--- a/net/bluetooth/hci_conn.c.rej
+++ /dev/null
@@ -1,10 +0,0 @@
-diff a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c (rejected hunks)
-@@ -404,7 +404,7 @@ void hci_le_ltk_reply(struct hci_conn *conn, u8 ltk[16])
- memset(&cp, 0, sizeof(cp));
-
- cp.handle = cpu_to_le16(conn->handle);
-- memcpy(cp.ltk, ltk, sizeof(ltk));
-+ memcpy(cp.ltk, ltk, sizeof(cp.ltk));
-
- hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
- }
diff --git a/net/bluetooth/l2cap_core.c.rej b/net/bluetooth/l2cap_core.c.rej
deleted file mode 100644
index 2ab9548..0000000
--- a/net/bluetooth/l2cap_core.c.rej
+++ /dev/null
@@ -1,15 +0,0 @@
---- net/bluetooth/l2cap_core.c 2012-05-21 11:33:40.879930017 +0200
-+++ net/bluetooth/l2cap_core.c 2012-05-21 12:10:12.092049029 +0200
-@@ -2587,8 +2589,10 @@ static void l2cap_conf_rfc_get(struct l2
-
- switch (type) {
- case L2CAP_CONF_RFC:
-- if (olen == sizeof(rfc))
-- memcpy(&rfc, (void *)val, olen);
-+ if (olen != sizeof(rfc))
-+ break;
-+
-+ memcpy(&rfc, (void *)val, olen);
- goto done;
- }
- }
diff --git a/net/compat.c b/net/compat.c
index e7353fc..abb5f2e 100644
--- a/net/compat.c
+++ b/net/compat.c
@@ -80,9 +80,9 @@ int get_compat_msghdr(struct msghdr *kmsg, struct compat_msghdr __user *umsg)
if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
kmsg->msg_namelen = sizeof(struct sockaddr_storage);
- kmsg->msg_name = compat_ptr(tmp1);
- kmsg->msg_iov = compat_ptr(tmp2);
- kmsg->msg_control = compat_ptr(tmp3);
+ kmsg->msg_name = (void __force_kernel *)compat_ptr(tmp1);
+ kmsg->msg_iov = (void __force_kernel *)compat_ptr(tmp2);
+ kmsg->msg_control = (void __force_kernel *)compat_ptr(tmp3);
return 0;
}
diff --git a/net/compat.c.rej b/net/compat.c.rej
deleted file mode 100644
index 79fee55..0000000
--- a/net/compat.c.rej
+++ /dev/null
@@ -1,14 +0,0 @@
---- net/compat.c 2012-08-09 20:18:52.173847490 +0200
-+++ net/compat.c 2012-08-09 20:19:41.993844830 +0200
-@@ -71,9 +71,9 @@ int get_compat_msghdr(struct msghdr *kms
- __get_user(kmsg->msg_controllen, &umsg->msg_controllen) ||
- __get_user(kmsg->msg_flags, &umsg->msg_flags))
- return -EFAULT;
-- kmsg->msg_name = compat_ptr(tmp1);
-- kmsg->msg_iov = compat_ptr(tmp2);
-- kmsg->msg_control = compat_ptr(tmp3);
-+ kmsg->msg_name = (void __force_kernel *)compat_ptr(tmp1);
-+ kmsg->msg_iov = (void __force_kernel *)compat_ptr(tmp2);
-+ kmsg->msg_control = (void __force_kernel *)compat_ptr(tmp3);
- return 0;
- }
diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
index d63a926..013947b 100644
--- a/net/ipv4/inetpeer.c
+++ b/net/ipv4/inetpeer.c
@@ -487,8 +487,8 @@ struct inet_peer *inet_getpeer(const struct inetpeer_addr *daddr, int create)
if (p) {
p->daddr = *daddr;
atomic_set(&p->refcnt, 1);
- atomic_set(&p->rid, 0);
- atomic_set(&p->ip_id_count,
+ atomic_set_unchecked(&p->rid, 0);
+ atomic_set_unchecked(&p->ip_id_count,
(daddr->family == AF_INET) ?
secure_ip_id(daddr->addr.a4) :
secure_ipv6_id(daddr->addr.a6));
diff --git a/net/ipv4/inetpeer.c.rej b/net/ipv4/inetpeer.c.rej
deleted file mode 100644
index d0bed373..0000000
--- a/net/ipv4/inetpeer.c.rej
+++ /dev/null
@@ -1,13 +0,0 @@
---- net/ipv4/inetpeer.c 2012-07-21 01:28:45.442708108 +0200
-+++ net/ipv4/inetpeer.c 2012-07-21 01:28:57.122708454 +0200
-@@ -487,8 +487,8 @@ relookup:
- if (p) {
- p->daddr = *daddr;
- atomic_set(&p->refcnt, 1);
-- atomic_set(&p->rid, 0);
-- atomic_set(&p->ip_id_count,
-+ atomic_set_unchecked(&p->rid, 0);
-+ atomic_set_unchecked(&p->ip_id_count,
- (daddr->family == AF_INET) ?
- secure_ip_id(daddr->addr.a4) :
- secure_ipv6_id(daddr->addr.a6));
diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
index bc374ad..55ea376 100644
--- a/net/ipv4/ping.c
+++ b/net/ipv4/ping.c
@@ -1108,7 +1108,7 @@ static void ping_format_sock(struct sock *sp, struct seq_file *f,
sk_rmem_alloc_get(sp),
0, 0L, 0, sock_i_uid(sp), 0, sock_i_ino(sp),
atomic_read(&sp->sk_refcnt), sp,
- atomic_read(&sp->sk_drops), len);
+ atomic_read_unchecked(&sp->sk_drops), len);
}
static int ping_seq_show(struct seq_file *seq, void *v)
diff --git a/net/ipv4/ping.c.rej b/net/ipv4/ping.c.rej
deleted file mode 100644
index 0f3a592..0000000
--- a/net/ipv4/ping.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- net/ipv4/ping.c 2012-05-21 11:33:41.183930034 +0200
-+++ net/ipv4/ping.c 2012-05-21 12:10:12.164049032 +0200
-@@ -838,7 +838,7 @@ static void ping_format_sock(struct sock
- sk_rmem_alloc_get(sp),
- 0, 0L, 0, sock_i_uid(sp), 0, sock_i_ino(sp),
- atomic_read(&sp->sk_refcnt), sp,
-- atomic_read(&sp->sk_drops), len);
-+ atomic_read_unchecked(&sp->sk_drops), len);
- }
-
- static int ping_seq_show(struct seq_file *seq, void *v)
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index b65d0c6..1ff48d3 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -3050,7 +3050,7 @@ static int rt_fill_info(struct net *net,
error = rt->dst.error;
if (peer) {
inet_peer_refcheck(rt->peer);
- id = atomic_read(&peer->ip_id_count) & 0xffff;
+ id = atomic_read_unchecked(&peer->ip_id_count) & 0xffff;
if (peer->tcp_ts_stamp) {
ts = peer->tcp_ts;
tsage = get_seconds() - peer->tcp_ts_stamp;
diff --git a/net/ipv4/route.c.rej b/net/ipv4/route.c.rej
deleted file mode 100644
index fe8448d..0000000
--- a/net/ipv4/route.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- net/ipv4/route.c 2012-05-21 11:33:41.191930034 +0200
-+++ net/ipv4/route.c 2012-05-21 12:10:12.176049032 +0200
-@@ -3009,7 +3009,7 @@ static int rt_fill_info(struct net *net,
- error = rt->dst.error;
- if (peer) {
- inet_peer_refcheck(rt->peer);
-- id = atomic_read(&peer->ip_id_count) & 0xffff;
-+ id = atomic_read_unchecked(&peer->ip_id_count) & 0xffff;
- if (peer->tcp_ts_stamp) {
- ts = peer->tcp_ts;
- tsage = get_seconds() - peer->tcp_ts_stamp;
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 2c19509..80b32cd 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -2098,7 +2098,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,
sk_rmem_alloc_get(sp),
0, 0L, 0, sock_i_uid(sp), 0, sock_i_ino(sp),
atomic_read(&sp->sk_refcnt), sp,
- atomic_read(&sp->sk_drops));
+ atomic_read_unchecked(&sp->sk_drops));
}
int udp4_seq_show(struct seq_file *seq, void *v)
diff --git a/net/ipv4/udp.c.rej b/net/ipv4/udp.c.rej
deleted file mode 100644
index 7f49fc5..0000000
--- a/net/ipv4/udp.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- net/ipv4/udp.c 2012-05-21 11:33:41.259930038 +0200
-+++ net/ipv4/udp.c 2012-05-21 12:10:12.180049033 +0200
-@@ -2095,7 +2095,7 @@ static void udp4_format_sock(struct sock
- sk_rmem_alloc_get(sp),
- 0, 0L, 0, sock_i_uid(sp), 0, sock_i_ino(sp),
- atomic_read(&sp->sk_refcnt), sp,
-- atomic_read(&sp->sk_drops), len);
-+ atomic_read_unchecked(&sp->sk_drops), len);
- }
-
- int udp4_seq_show(struct seq_file *seq, void *v)
diff --git a/net/phonet/socket.c b/net/phonet/socket.c
index 0e3c6ec..6626a58 100644
--- a/net/phonet/socket.c
+++ b/net/phonet/socket.c
@@ -613,7 +613,7 @@ static int pn_sock_seq_show(struct seq_file *seq, void *v)
sk_wmem_alloc_get(sk), sk_rmem_alloc_get(sk),
sock_i_uid(sk), sock_i_ino(sk),
atomic_read(&sk->sk_refcnt), sk,
- atomic_read(&sk->sk_drops));
+ atomic_read_unchecked(&sk->sk_drops));
}
seq_pad(seq, '\n');
return 0;
diff --git a/net/phonet/socket.c.rej b/net/phonet/socket.c.rej
deleted file mode 100644
index 36ff5fd..0000000
--- a/net/phonet/socket.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- net/phonet/socket.c 2012-03-19 10:39:14.136049059 +0100
-+++ net/phonet/socket.c 2012-05-21 12:10:12.268049037 +0200
-@@ -614,7 +614,7 @@ static int pn_sock_seq_show(struct seq_f
- sk_wmem_alloc_get(sk), sk_rmem_alloc_get(sk),
- sock_i_uid(sk), sock_i_ino(sk),
- atomic_read(&sk->sk_refcnt), sk,
-- atomic_read(&sk->sk_drops), &len);
-+ atomic_read_unchecked(&sk->sk_drops), &len);
- }
- seq_printf(seq, "%*s\n", 127 - len, "");
- return 0;
diff --git a/net/socket.c b/net/socket.c
index aff24ac..ed7a698 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -2191,7 +2191,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
/* Save the user-mode address (verify_iovec will change the
* kernel msghdr to use the kernel address space)
*/
- uaddr = (__force void __user *)msg_sys->msg_name;
+ uaddr = (void __force_user *)msg_sys->msg_name;
uaddr_len = COMPAT_NAMELEN(msg);
if (MSG_CMSG_COMPAT & flags)
err = verify_compat_iovec(msg_sys, iov, &addr, VERIFY_WRITE);
diff --git a/net/socket.c.rej b/net/socket.c.rej
deleted file mode 100644
index a137006..0000000
--- a/net/socket.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- net/socket.c 2012-08-09 20:18:52.313847482 +0200
-+++ net/socket.c 2012-08-09 20:19:06.321846735 +0200
-@@ -2139,7 +2139,7 @@ static int __sys_recvmsg(struct socket *
- * kernel msghdr to use the kernel address space)
- */
-
-- uaddr = (__force void __user *)msg_sys->msg_name;
-+ uaddr = (void __force_user *)msg_sys->msg_name;
- uaddr_len = COMPAT_NAMELEN(msg);
- if (MSG_CMSG_COMPAT & flags) {
- err = verify_compat_iovec(msg_sys, iov, &addr, VERIFY_WRITE);
diff --git a/security/keys/compat.c b/security/keys/compat.c
index 1b0b7bf..9476b92 100644
--- a/security/keys/compat.c
+++ b/security/keys/compat.c
@@ -44,7 +44,7 @@ long compat_keyctl_instantiate_key_iov(
if (ret == 0)
goto no_payload_free;
- ret = keyctl_instantiate_key_common(id, iov, ioc, ret, ringid);
+ ret = keyctl_instantiate_key_common(id, (const struct iovec __force_user *)iov, ioc, ret, ringid);
err:
if (iov != iovstack)
kfree(iov);
diff --git a/security/keys/compat.c.rej b/security/keys/compat.c.rej
deleted file mode 100644
index 7a74d9d..0000000
--- a/security/keys/compat.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- security/keys/compat.c 2012-01-08 19:48:31.735470731 +0100
-+++ security/keys/compat.c 2012-05-21 12:10:12.400049045 +0200
-@@ -44,7 +44,7 @@ long compat_keyctl_instantiate_key_iov(
- if (ret == 0)
- goto no_payload_free;
-
-- ret = keyctl_instantiate_key_common(id, iov, ioc, ret, ringid);
-+ ret = keyctl_instantiate_key_common(id, (const struct iovec __force_user *)iov, ioc, ret, ringid);
-
- if (iov != iovstack)
- kfree(iov);
diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
index dc57d2b..07bb546 100644
--- a/security/keys/keyctl.c
+++ b/security/keys/keyctl.c
@@ -1085,7 +1085,7 @@ long keyctl_instantiate_key_iov(key_serial_t id,
if (ret == 0)
goto no_payload_free;
- ret = keyctl_instantiate_key_common(id, iov, ioc, ret, ringid);
+ ret = keyctl_instantiate_key_common(id, (const struct iovec __force_user *)iov, ioc, ret, ringid);
err:
if (iov != iovstack)
kfree(iov);
diff --git a/security/keys/keyctl.c.rej b/security/keys/keyctl.c.rej
deleted file mode 100644
index 60237fb..0000000
--- a/security/keys/keyctl.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- security/keys/keyctl.c 2012-05-21 11:33:42.531930107 +0200
-+++ security/keys/keyctl.c 2012-05-21 12:10:12.404049045 +0200
-@@ -1085,7 +1085,7 @@ long keyctl_instantiate_key_iov(key_seri
- if (ret == 0)
- goto no_payload_free;
-
-- ret = keyctl_instantiate_key_common(id, iov, ioc, ret, ringid);
-+ ret = keyctl_instantiate_key_common(id, (const struct iovec __force_user *)iov, ioc, ret, ringid);
-
- if (iov != iovstack)
- kfree(iov);
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 8ca7b07..6cb5d78 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -5780,7 +5780,7 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer)
#endif
-static struct security_operations selinux_ops = {
+static struct security_operations selinux_ops __read_only = {
.name = "selinux",
.binder_set_context_mgr = selinux_binder_set_context_mgr,
diff --git a/security/selinux/hooks.c.rej b/security/selinux/hooks.c.rej
deleted file mode 100644
index 1e2910c..0000000
--- a/security/selinux/hooks.c.rej
+++ /dev/null
@@ -1,10 +0,0 @@
-diff a/security/selinux/hooks.c b/security/selinux/hooks.c (rejected hunks)
-@@ -5801,7 +5801,7 @@ static int selinux_bprm_check_security (struct linux_binprm *bprm)
- #endif
- /* TmmSecure end */
-
--static struct security_operations selinux_ops = {
-+static struct security_operations selinux_ops __read_only = {
- .name = "selinux",
-
- .binder_set_context_mgr = selinux_binder_set_context_mgr,
diff --git a/sound/soc/soc-pcm.c.rej b/sound/soc/soc-pcm.c.rej
deleted file mode 100644
index 9673a52..0000000
--- a/sound/soc/soc-pcm.c.rej
+++ /dev/null
@@ -1,11 +0,0 @@
---- sound/soc/soc-pcm.c 2012-05-21 11:33:44.919930237 +0200
-+++ sound/soc/soc-pcm.c 2012-05-21 12:10:12.480049049 +0200
-@@ -641,7 +641,7 @@ int soc_new_pcm(struct snd_soc_pcm_runti
- struct snd_soc_platform *platform = rtd->platform;
- struct snd_soc_dai *codec_dai = rtd->codec_dai;
- struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
-- struct snd_pcm_ops *soc_pcm_ops = &rtd->ops;
-+ snd_pcm_ops_no_const *soc_pcm_ops = &rtd->ops;
- struct snd_pcm *pcm;
- char new_name[64];
- int ret = 0, playback = 0, capture = 0;
diff --git a/sound/usb/card.h.rej b/sound/usb/card.h.rej
deleted file mode 100644
index eae6a2b..0000000
--- a/sound/usb/card.h.rej
+++ /dev/null
@@ -1,18 +0,0 @@
-diff a/sound/usb/card.h b/sound/usb/card.h (rejected hunks)
-@@ -45,6 +45,7 @@ struct snd_urb_ops {
- int (*prepare_sync)(struct snd_usb_substream *subs, struct snd_pcm_runtime *runtime, struct urb *u);
- int (*retire_sync)(struct snd_usb_substream *subs, struct snd_pcm_runtime *runtime, struct urb *u);
- };
-+typedef struct snd_urb_ops __no_const snd_urb_ops_no_const;
-
- struct snd_usb_substream {
- struct snd_usb_stream *stream;
-@@ -96,7 +97,7 @@ struct snd_usb_substream {
- struct snd_pcm_hw_constraint_list rate_list; /* limited rates */
- spinlock_t lock;
-
-- struct snd_urb_ops ops; /* callbacks (must be filled at init) */
-+ snd_urb_ops_no_const ops; /* callbacks (must be filled at init) */
- int last_frame_number; /* stored frame number */
- int last_delay; /* stored delay */
- };
diff --git a/usr/gen_init_cpio.c b/usr/gen_init_cpio.c
index aca6edc..86cd399 100644
--- a/usr/gen_init_cpio.c
+++ b/usr/gen_init_cpio.c
@@ -392,12 +392,10 @@ static char *cpio_replace_env(char *new_location)
*env_var = *expanded = '\0';
strncat(env_var, start + 2, end - start - 2);
strncat(expanded, new_location, start - new_location);
- strncat(expanded, getenv(env_var),
- PATH_MAX - strlen(expanded));
- strncat(expanded, end + 1,
- PATH_MAX - strlen(expanded));
- strncpy(new_location, expanded, PATH_MAX);
- new_location[PATH_MAX] = 0;
+ strncat(expanded, getenv(env_var), PATH_MAX - strlen(expanded));
+ strncat(expanded, end + 1, PATH_MAX - strlen(expanded));
+ strncpy(new_location, expanded, PATH_MAX);
+ new_location[PATH_MAX] = 0;
} else
break;
}
diff --git a/usr/gen_init_cpio.c.rej b/usr/gen_init_cpio.c.rej
deleted file mode 100644
index 3e1b7ce..0000000
--- a/usr/gen_init_cpio.c.rej
+++ /dev/null
@@ -1,24 +0,0 @@
---- usr/gen_init_cpio.c 2011-07-22 04:17:23.000000000 +0200
-+++ usr/gen_init_cpio.c 2012-05-21 12:10:12.504049050 +0200
-@@ -303,7 +303,7 @@ static int cpio_mkfile(const char *name,
- int retval;
- int rc = -1;
- int namesize;
-- int i;
-+ unsigned int i;
-
- mode |= S_IFREG;
-
-@@ -392,9 +392,10 @@ static char *cpio_replace_env(char *new_
- *env_var = *expanded = '\0';
- strncat(env_var, start + 2, end - start - 2);
- strncat(expanded, new_location, start - new_location);
-- strncat(expanded, getenv(env_var), PATH_MAX);
-- strncat(expanded, end + 1, PATH_MAX);
-+ strncat(expanded, getenv(env_var), PATH_MAX - strlen(expanded));
-+ strncat(expanded, end + 1, PATH_MAX - strlen(expanded));
- strncpy(new_location, expanded, PATH_MAX);
-+ new_location[PATH_MAX] = 0;
- } else
- break;
- }