diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-20 21:05:28 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-20 21:05:28 -0500 |
commit | 54d46ea993744c5408e39ce0cb4851e13cbea716 (patch) | |
tree | 8e38fa92cc2ae72e0353c44e1e68be9bf5a7a058 | |
parent | f59dc2bb5a50b26ea751f9eac1c81e4cc7de5257 (diff) | |
parent | 50ececcfa7d1acee085b2c518cad495062db6379 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
Pull signal handling cleanups from Al Viro:
"sigaltstack infrastructure + conversion for x86, alpha and um,
COMPAT_SYSCALL_DEFINE infrastructure.
Note that there are several conflicts between "unify
SS_ONSTACK/SS_DISABLE definitions" and UAPI patches in mainline;
resolution is trivial - just remove definitions of SS_ONSTACK and
SS_DISABLED from arch/*/uapi/asm/signal.h; they are all identical and
include/uapi/linux/signal.h contains the unified variant."
Fixed up conflicts as per Al.
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal:
alpha: switch to generic sigaltstack
new helpers: __save_altstack/__compat_save_altstack, switch x86 and um to those
generic compat_sys_sigaltstack()
introduce generic sys_sigaltstack(), switch x86 and um to it
new helper: compat_user_stack_pointer()
new helper: restore_altstack()
unify SS_ONSTACK/SS_DISABLE definitions
new helper: current_user_stack_pointer()
missing user_stack_pointer() instances
Bury the conditionals from kernel_thread/kernel_execve series
COMPAT_SYSCALL_DEFINE: infrastructure
118 files changed, 211 insertions, 357 deletions
diff --git a/arch/Kconfig b/arch/Kconfig index 8e9e3246b2b4..7f8f281f2585 100644 --- a/arch/Kconfig +++ b/arch/Kconfig | |||
@@ -291,12 +291,6 @@ config ARCH_WANT_OLD_COMPAT_IPC | |||
291 | select ARCH_WANT_COMPAT_IPC_PARSE_VERSION | 291 | select ARCH_WANT_COMPAT_IPC_PARSE_VERSION |
292 | bool | 292 | bool |
293 | 293 | ||
294 | config GENERIC_KERNEL_THREAD | ||
295 | bool | ||
296 | |||
297 | config GENERIC_KERNEL_EXECVE | ||
298 | bool | ||
299 | |||
300 | config HAVE_ARCH_SECCOMP_FILTER | 294 | config HAVE_ARCH_SECCOMP_FILTER |
301 | bool | 295 | bool |
302 | help | 296 | help |
@@ -362,6 +356,9 @@ config MODULES_USE_ELF_REL | |||
362 | Modules only use ELF REL relocations. Modules with ELF RELA | 356 | Modules only use ELF REL relocations. Modules with ELF RELA |
363 | relocations will give an error. | 357 | relocations will give an error. |
364 | 358 | ||
359 | config GENERIC_SIGALTSTACK | ||
360 | bool | ||
361 | |||
365 | # | 362 | # |
366 | # ABI hall of shame | 363 | # ABI hall of shame |
367 | # | 364 | # |
diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 5dd7f5db24d4..9d5904cc7712 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig | |||
@@ -20,10 +20,9 @@ config ALPHA | |||
20 | select GENERIC_CMOS_UPDATE | 20 | select GENERIC_CMOS_UPDATE |
21 | select GENERIC_STRNCPY_FROM_USER | 21 | select GENERIC_STRNCPY_FROM_USER |
22 | select GENERIC_STRNLEN_USER | 22 | select GENERIC_STRNLEN_USER |
23 | select GENERIC_KERNEL_THREAD | ||
24 | select GENERIC_KERNEL_EXECVE | ||
25 | select HAVE_MOD_ARCH_SPECIFIC | 23 | select HAVE_MOD_ARCH_SPECIFIC |
26 | select MODULES_USE_ELF_RELA | 24 | select MODULES_USE_ELF_RELA |
25 | select GENERIC_SIGALTSTACK | ||
27 | help | 26 | help |
28 | The Alpha is a 64-bit general-purpose processor designed and | 27 | The Alpha is a 64-bit general-purpose processor designed and |
29 | marketed by the Digital Equipment Corporation of blessed memory, | 28 | marketed by the Digital Equipment Corporation of blessed memory, |
diff --git a/arch/alpha/include/asm/ptrace.h b/arch/alpha/include/asm/ptrace.h index df9a6cd748d5..21128505ddbe 100644 --- a/arch/alpha/include/asm/ptrace.h +++ b/arch/alpha/include/asm/ptrace.h | |||
@@ -8,6 +8,7 @@ | |||
8 | #define user_mode(regs) (((regs)->ps & 8) != 0) | 8 | #define user_mode(regs) (((regs)->ps & 8) != 0) |
9 | #define instruction_pointer(regs) ((regs)->pc) | 9 | #define instruction_pointer(regs) ((regs)->pc) |
10 | #define profile_pc(regs) instruction_pointer(regs) | 10 | #define profile_pc(regs) instruction_pointer(regs) |
11 | #define current_user_stack_pointer() rdusp() | ||
11 | 12 | ||
12 | #define task_pt_regs(task) \ | 13 | #define task_pt_regs(task) \ |
13 | ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1) | 14 | ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1) |
diff --git a/arch/alpha/include/asm/unistd.h b/arch/alpha/include/asm/unistd.h index d6069ff3b1c8..b3396ee039b7 100644 --- a/arch/alpha/include/asm/unistd.h +++ b/arch/alpha/include/asm/unistd.h | |||
@@ -15,7 +15,6 @@ | |||
15 | #define __ARCH_WANT_SYS_OLDUMOUNT | 15 | #define __ARCH_WANT_SYS_OLDUMOUNT |
16 | #define __ARCH_WANT_SYS_SIGPENDING | 16 | #define __ARCH_WANT_SYS_SIGPENDING |
17 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 17 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
18 | #define __ARCH_WANT_SYS_EXECVE | ||
19 | #define __ARCH_WANT_SYS_FORK | 18 | #define __ARCH_WANT_SYS_FORK |
20 | #define __ARCH_WANT_SYS_VFORK | 19 | #define __ARCH_WANT_SYS_VFORK |
21 | #define __ARCH_WANT_SYS_CLONE | 20 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/alpha/include/uapi/asm/signal.h b/arch/alpha/include/uapi/asm/signal.h index 965bbfa59c65..dd4ca4bcbb4a 100644 --- a/arch/alpha/include/uapi/asm/signal.h +++ b/arch/alpha/include/uapi/asm/signal.h | |||
@@ -84,12 +84,6 @@ typedef unsigned long sigset_t; | |||
84 | #define SA_ONESHOT SA_RESETHAND | 84 | #define SA_ONESHOT SA_RESETHAND |
85 | #define SA_NOMASK SA_NODEFER | 85 | #define SA_NOMASK SA_NODEFER |
86 | 86 | ||
87 | /* | ||
88 | * sigaltstack controls | ||
89 | */ | ||
90 | #define SS_ONSTACK 1 | ||
91 | #define SS_DISABLE 2 | ||
92 | |||
93 | #define MINSIGSTKSZ 4096 | 87 | #define MINSIGSTKSZ 4096 |
94 | #define SIGSTKSZ 16384 | 88 | #define SIGSTKSZ 16384 |
95 | 89 | ||
diff --git a/arch/alpha/kernel/signal.c b/arch/alpha/kernel/signal.c index 336393c9c11f..02d02c047f17 100644 --- a/arch/alpha/kernel/signal.c +++ b/arch/alpha/kernel/signal.c | |||
@@ -122,12 +122,6 @@ SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask) | |||
122 | return sigsuspend(&blocked); | 122 | return sigsuspend(&blocked); |
123 | } | 123 | } |
124 | 124 | ||
125 | asmlinkage int | ||
126 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss) | ||
127 | { | ||
128 | return do_sigaltstack(uss, uoss, rdusp()); | ||
129 | } | ||
130 | |||
131 | /* | 125 | /* |
132 | * Do a signal return; undo the signal stack. | 126 | * Do a signal return; undo the signal stack. |
133 | */ | 127 | */ |
@@ -418,9 +412,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
418 | err |= __put_user(0, &frame->uc.uc_flags); | 412 | err |= __put_user(0, &frame->uc.uc_flags); |
419 | err |= __put_user(0, &frame->uc.uc_link); | 413 | err |= __put_user(0, &frame->uc.uc_link); |
420 | err |= __put_user(set->sig[0], &frame->uc.uc_osf_sigmask); | 414 | err |= __put_user(set->sig[0], &frame->uc.uc_osf_sigmask); |
421 | err |= __put_user(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); | 415 | err |= __save_altstack(&frame->uc.uc_stack, oldsp); |
422 | err |= __put_user(sas_ss_flags(oldsp), &frame->uc.uc_stack.ss_flags); | ||
423 | err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); | ||
424 | err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, | 416 | err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, |
425 | set->sig[0], oldsp); | 417 | set->sig[0], oldsp); |
426 | err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); | 418 | err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 8c83d98424c7..f95ba14ae3d0 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -12,8 +12,6 @@ config ARM | |||
12 | select GENERIC_CLOCKEVENTS_BROADCAST if SMP | 12 | select GENERIC_CLOCKEVENTS_BROADCAST if SMP |
13 | select GENERIC_IRQ_PROBE | 13 | select GENERIC_IRQ_PROBE |
14 | select GENERIC_IRQ_SHOW | 14 | select GENERIC_IRQ_SHOW |
15 | select GENERIC_KERNEL_THREAD | ||
16 | select GENERIC_KERNEL_EXECVE | ||
17 | select GENERIC_PCI_IOMAP | 15 | select GENERIC_PCI_IOMAP |
18 | select GENERIC_SMP_IDLE_THREAD | 16 | select GENERIC_SMP_IDLE_THREAD |
19 | select GENERIC_STRNCPY_FROM_USER | 17 | select GENERIC_STRNCPY_FROM_USER |
diff --git a/arch/arm/include/asm/unistd.h b/arch/arm/include/asm/unistd.h index 7cd13cc62624..21a2700d2957 100644 --- a/arch/arm/include/asm/unistd.h +++ b/arch/arm/include/asm/unistd.h | |||
@@ -41,7 +41,6 @@ | |||
41 | #define __ARCH_WANT_OLD_READDIR | 41 | #define __ARCH_WANT_OLD_READDIR |
42 | #define __ARCH_WANT_SYS_SOCKETCALL | 42 | #define __ARCH_WANT_SYS_SOCKETCALL |
43 | #endif | 43 | #endif |
44 | #define __ARCH_WANT_SYS_EXECVE | ||
45 | #define __ARCH_WANT_SYS_FORK | 44 | #define __ARCH_WANT_SYS_FORK |
46 | #define __ARCH_WANT_SYS_VFORK | 45 | #define __ARCH_WANT_SYS_VFORK |
47 | #define __ARCH_WANT_SYS_CLONE | 46 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/arm/include/uapi/asm/signal.h b/arch/arm/include/uapi/asm/signal.h index 921c57fdc52e..33073bdcf091 100644 --- a/arch/arm/include/uapi/asm/signal.h +++ b/arch/arm/include/uapi/asm/signal.h | |||
@@ -87,13 +87,6 @@ typedef unsigned long sigset_t; | |||
87 | #define SA_NOMASK SA_NODEFER | 87 | #define SA_NOMASK SA_NODEFER |
88 | #define SA_ONESHOT SA_RESETHAND | 88 | #define SA_ONESHOT SA_RESETHAND |
89 | 89 | ||
90 | |||
91 | /* | ||
92 | * sigaltstack controls | ||
93 | */ | ||
94 | #define SS_ONSTACK 1 | ||
95 | #define SS_DISABLE 2 | ||
96 | |||
97 | #define MINSIGSTKSZ 2048 | 90 | #define MINSIGSTKSZ 2048 |
98 | #define SIGSTKSZ 8192 | 91 | #define SIGSTKSZ 8192 |
99 | 92 | ||
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index f9ccff915918..9c829b008261 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig | |||
@@ -8,8 +8,6 @@ config ARM64 | |||
8 | select GENERIC_IOMAP | 8 | select GENERIC_IOMAP |
9 | select GENERIC_IRQ_PROBE | 9 | select GENERIC_IRQ_PROBE |
10 | select GENERIC_IRQ_SHOW | 10 | select GENERIC_IRQ_SHOW |
11 | select GENERIC_KERNEL_EXECVE | ||
12 | select GENERIC_KERNEL_THREAD | ||
13 | select GENERIC_SMP_IDLE_THREAD | 11 | select GENERIC_SMP_IDLE_THREAD |
14 | select GENERIC_TIME_VSYSCALL | 12 | select GENERIC_TIME_VSYSCALL |
15 | select HARDIRQS_SW_RESEND | 13 | select HARDIRQS_SW_RESEND |
diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h index 37e610dc084e..d9ec40217a27 100644 --- a/arch/arm64/include/asm/compat.h +++ b/arch/arm64/include/asm/compat.h | |||
@@ -209,10 +209,11 @@ static inline compat_uptr_t ptr_to_compat(void __user *uptr) | |||
209 | return (u32)(unsigned long)uptr; | 209 | return (u32)(unsigned long)uptr; |
210 | } | 210 | } |
211 | 211 | ||
212 | #define compat_user_stack_pointer() (current_pt_regs()->compat_sp) | ||
213 | |||
212 | static inline void __user *arch_compat_alloc_user_space(long len) | 214 | static inline void __user *arch_compat_alloc_user_space(long len) |
213 | { | 215 | { |
214 | struct pt_regs *regs = task_pt_regs(current); | 216 | return (void __user *)compat_user_stack_pointer() - len; |
215 | return (void __user *)regs->compat_sp - len; | ||
216 | } | 217 | } |
217 | 218 | ||
218 | struct compat_ipc64_perm { | 219 | struct compat_ipc64_perm { |
diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h index 76fb7dd3350a..744087fb521c 100644 --- a/arch/arm64/include/asm/unistd.h +++ b/arch/arm64/include/asm/unistd.h | |||
@@ -28,6 +28,5 @@ | |||
28 | #define __ARCH_WANT_SYS_FORK | 28 | #define __ARCH_WANT_SYS_FORK |
29 | #define __ARCH_WANT_SYS_VFORK | 29 | #define __ARCH_WANT_SYS_VFORK |
30 | #endif | 30 | #endif |
31 | #define __ARCH_WANT_SYS_EXECVE | ||
32 | #define __ARCH_WANT_SYS_CLONE | 31 | #define __ARCH_WANT_SYS_CLONE |
33 | #include <uapi/asm/unistd.h> | 32 | #include <uapi/asm/unistd.h> |
diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig index e40c9bd79143..2ae6591b3a55 100644 --- a/arch/avr32/Kconfig +++ b/arch/avr32/Kconfig | |||
@@ -17,8 +17,6 @@ config AVR32 | |||
17 | select GENERIC_CLOCKEVENTS | 17 | select GENERIC_CLOCKEVENTS |
18 | select HAVE_MOD_ARCH_SPECIFIC | 18 | select HAVE_MOD_ARCH_SPECIFIC |
19 | select MODULES_USE_ELF_RELA | 19 | select MODULES_USE_ELF_RELA |
20 | select GENERIC_KERNEL_THREAD | ||
21 | select GENERIC_KERNEL_EXECVE | ||
22 | help | 20 | help |
23 | AVR32 is a high-performance 32-bit RISC microprocessor core, | 21 | AVR32 is a high-performance 32-bit RISC microprocessor core, |
24 | designed for cost-sensitive embedded applications, with particular | 22 | designed for cost-sensitive embedded applications, with particular |
diff --git a/arch/avr32/include/asm/ptrace.h b/arch/avr32/include/asm/ptrace.h index 8d3c412fc65f..630e4f9bf5f0 100644 --- a/arch/avr32/include/asm/ptrace.h +++ b/arch/avr32/include/asm/ptrace.h | |||
@@ -21,6 +21,7 @@ | |||
21 | #define user_mode(regs) (((regs)->sr & MODE_MASK) == MODE_USER) | 21 | #define user_mode(regs) (((regs)->sr & MODE_MASK) == MODE_USER) |
22 | #define instruction_pointer(regs) ((regs)->pc) | 22 | #define instruction_pointer(regs) ((regs)->pc) |
23 | #define profile_pc(regs) instruction_pointer(regs) | 23 | #define profile_pc(regs) instruction_pointer(regs) |
24 | #define user_stack_pointer(regs) ((regs)->sp) | ||
24 | 25 | ||
25 | static __inline__ int valid_user_regs(struct pt_regs *regs) | 26 | static __inline__ int valid_user_regs(struct pt_regs *regs) |
26 | { | 27 | { |
diff --git a/arch/avr32/include/asm/unistd.h b/arch/avr32/include/asm/unistd.h index f05a9804e8e2..0bdf6371574e 100644 --- a/arch/avr32/include/asm/unistd.h +++ b/arch/avr32/include/asm/unistd.h | |||
@@ -39,7 +39,6 @@ | |||
39 | #define __ARCH_WANT_SYS_GETPGRP | 39 | #define __ARCH_WANT_SYS_GETPGRP |
40 | #define __ARCH_WANT_SYS_RT_SIGACTION | 40 | #define __ARCH_WANT_SYS_RT_SIGACTION |
41 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 41 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
42 | #define __ARCH_WANT_SYS_EXECVE | ||
43 | #define __ARCH_WANT_SYS_FORK | 42 | #define __ARCH_WANT_SYS_FORK |
44 | #define __ARCH_WANT_SYS_VFORK | 43 | #define __ARCH_WANT_SYS_VFORK |
45 | #define __ARCH_WANT_SYS_CLONE | 44 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/avr32/include/uapi/asm/signal.h b/arch/avr32/include/uapi/asm/signal.h index eb46f61adb7d..1b77a93eff50 100644 --- a/arch/avr32/include/uapi/asm/signal.h +++ b/arch/avr32/include/uapi/asm/signal.h | |||
@@ -89,12 +89,6 @@ typedef unsigned long sigset_t; | |||
89 | #define SA_NOMASK SA_NODEFER | 89 | #define SA_NOMASK SA_NODEFER |
90 | #define SA_ONESHOT SA_RESETHAND | 90 | #define SA_ONESHOT SA_RESETHAND |
91 | 91 | ||
92 | /* | ||
93 | * sigaltstack controls | ||
94 | */ | ||
95 | #define SS_ONSTACK 1 | ||
96 | #define SS_DISABLE 2 | ||
97 | |||
98 | #define MINSIGSTKSZ 2048 | 92 | #define MINSIGSTKSZ 2048 |
99 | #define SIGSTKSZ 8192 | 93 | #define SIGSTKSZ 8192 |
100 | 94 | ||
diff --git a/arch/blackfin/Kconfig b/arch/blackfin/Kconfig index ab9ff4075f4d..b6f3ad5441c5 100644 --- a/arch/blackfin/Kconfig +++ b/arch/blackfin/Kconfig | |||
@@ -45,8 +45,6 @@ config BLACKFIN | |||
45 | select ARCH_USES_GETTIMEOFFSET if !GENERIC_CLOCKEVENTS | 45 | select ARCH_USES_GETTIMEOFFSET if !GENERIC_CLOCKEVENTS |
46 | select HAVE_MOD_ARCH_SPECIFIC | 46 | select HAVE_MOD_ARCH_SPECIFIC |
47 | select MODULES_USE_ELF_RELA | 47 | select MODULES_USE_ELF_RELA |
48 | select GENERIC_KERNEL_THREAD | ||
49 | select GENERIC_KERNEL_EXECVE | ||
50 | 48 | ||
51 | config GENERIC_CSUM | 49 | config GENERIC_CSUM |
52 | def_bool y | 50 | def_bool y |
diff --git a/arch/blackfin/include/asm/ptrace.h b/arch/blackfin/include/asm/ptrace.h index 14ea93388c05..c00491594b46 100644 --- a/arch/blackfin/include/asm/ptrace.h +++ b/arch/blackfin/include/asm/ptrace.h | |||
@@ -17,6 +17,7 @@ | |||
17 | #define arch_has_single_step() (1) | 17 | #define arch_has_single_step() (1) |
18 | /* common code demands this function */ | 18 | /* common code demands this function */ |
19 | #define ptrace_disable(child) user_disable_single_step(child) | 19 | #define ptrace_disable(child) user_disable_single_step(child) |
20 | #define current_user_stack_pointer() rdusp() | ||
20 | 21 | ||
21 | extern int is_user_addr_valid(struct task_struct *child, | 22 | extern int is_user_addr_valid(struct task_struct *child, |
22 | unsigned long start, unsigned long len); | 23 | unsigned long start, unsigned long len); |
diff --git a/arch/blackfin/include/asm/unistd.h b/arch/blackfin/include/asm/unistd.h index 17eb748e9c54..e943cb130048 100644 --- a/arch/blackfin/include/asm/unistd.h +++ b/arch/blackfin/include/asm/unistd.h | |||
@@ -20,7 +20,6 @@ | |||
20 | #define __ARCH_WANT_SYS_NICE | 20 | #define __ARCH_WANT_SYS_NICE |
21 | #define __ARCH_WANT_SYS_RT_SIGACTION | 21 | #define __ARCH_WANT_SYS_RT_SIGACTION |
22 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 22 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
23 | #define __ARCH_WANT_SYS_EXECVE | ||
24 | #define __ARCH_WANT_SYS_VFORK | 23 | #define __ARCH_WANT_SYS_VFORK |
25 | 24 | ||
26 | /* | 25 | /* |
diff --git a/arch/c6x/Kconfig b/arch/c6x/Kconfig index 66eab3703c75..f6a3648f5ec3 100644 --- a/arch/c6x/Kconfig +++ b/arch/c6x/Kconfig | |||
@@ -17,8 +17,6 @@ config C6X | |||
17 | select OF | 17 | select OF |
18 | select OF_EARLY_FLATTREE | 18 | select OF_EARLY_FLATTREE |
19 | select GENERIC_CLOCKEVENTS | 19 | select GENERIC_CLOCKEVENTS |
20 | select GENERIC_KERNEL_THREAD | ||
21 | select GENERIC_KERNEL_EXECVE | ||
22 | select MODULES_USE_ELF_RELA | 20 | select MODULES_USE_ELF_RELA |
23 | 21 | ||
24 | config MMU | 22 | config MMU |
diff --git a/arch/c6x/include/uapi/asm/unistd.h b/arch/c6x/include/uapi/asm/unistd.h index f3987a8703d9..e7d09a614d10 100644 --- a/arch/c6x/include/uapi/asm/unistd.h +++ b/arch/c6x/include/uapi/asm/unistd.h | |||
@@ -14,7 +14,6 @@ | |||
14 | * more details. | 14 | * more details. |
15 | */ | 15 | */ |
16 | 16 | ||
17 | #define __ARCH_WANT_SYS_EXECVE | ||
18 | #define __ARCH_WANT_SYS_CLONE | 17 | #define __ARCH_WANT_SYS_CLONE |
19 | 18 | ||
20 | /* Use the standard ABI for syscalls. */ | 19 | /* Use the standard ABI for syscalls. */ |
diff --git a/arch/cris/Kconfig b/arch/cris/Kconfig index 0cac6a49f230..c59a01dd9c0c 100644 --- a/arch/cris/Kconfig +++ b/arch/cris/Kconfig | |||
@@ -49,8 +49,6 @@ config CRIS | |||
49 | select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32 | 49 | select GENERIC_SMP_IDLE_THREAD if ETRAX_ARCH_V32 |
50 | select GENERIC_CMOS_UPDATE | 50 | select GENERIC_CMOS_UPDATE |
51 | select MODULES_USE_ELF_RELA | 51 | select MODULES_USE_ELF_RELA |
52 | select GENERIC_KERNEL_THREAD | ||
53 | select GENERIC_KERNEL_EXECVE | ||
54 | select CLONE_BACKWARDS2 | 52 | select CLONE_BACKWARDS2 |
55 | 53 | ||
56 | config HZ | 54 | config HZ |
diff --git a/arch/cris/include/asm/ptrace.h b/arch/cris/include/asm/ptrace.h index 2de84d7061c7..9e788d04a4ef 100644 --- a/arch/cris/include/asm/ptrace.h +++ b/arch/cris/include/asm/ptrace.h | |||
@@ -9,5 +9,6 @@ | |||
9 | #define PTRACE_SETREGS 13 | 9 | #define PTRACE_SETREGS 13 |
10 | 10 | ||
11 | #define profile_pc(regs) instruction_pointer(regs) | 11 | #define profile_pc(regs) instruction_pointer(regs) |
12 | #define current_user_stack_pointer() rdusp() | ||
12 | 13 | ||
13 | #endif /* _CRIS_PTRACE_H */ | 14 | #endif /* _CRIS_PTRACE_H */ |
diff --git a/arch/cris/include/asm/unistd.h b/arch/cris/include/asm/unistd.h index 89680f9eac0d..6d062bdf92d4 100644 --- a/arch/cris/include/asm/unistd.h +++ b/arch/cris/include/asm/unistd.h | |||
@@ -32,7 +32,6 @@ | |||
32 | #define __ARCH_WANT_SYS_SIGPROCMASK | 32 | #define __ARCH_WANT_SYS_SIGPROCMASK |
33 | #define __ARCH_WANT_SYS_RT_SIGACTION | 33 | #define __ARCH_WANT_SYS_RT_SIGACTION |
34 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 34 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
35 | #define __ARCH_WANT_SYS_EXECVE | ||
36 | #define __ARCH_WANT_SYS_FORK | 35 | #define __ARCH_WANT_SYS_FORK |
37 | #define __ARCH_WANT_SYS_VFORK | 36 | #define __ARCH_WANT_SYS_VFORK |
38 | #define __ARCH_WANT_SYS_CLONE | 37 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/cris/include/uapi/asm/signal.h b/arch/cris/include/uapi/asm/signal.h index 21624948a96d..ce42fa7c32ad 100644 --- a/arch/cris/include/uapi/asm/signal.h +++ b/arch/cris/include/uapi/asm/signal.h | |||
@@ -83,12 +83,6 @@ typedef unsigned long sigset_t; | |||
83 | 83 | ||
84 | #define SA_RESTORER 0x04000000 | 84 | #define SA_RESTORER 0x04000000 |
85 | 85 | ||
86 | /* | ||
87 | * sigaltstack controls | ||
88 | */ | ||
89 | #define SS_ONSTACK 1 | ||
90 | #define SS_DISABLE 2 | ||
91 | |||
92 | #define MINSIGSTKSZ 2048 | 86 | #define MINSIGSTKSZ 2048 |
93 | #define SIGSTKSZ 8192 | 87 | #define SIGSTKSZ 8192 |
94 | 88 | ||
diff --git a/arch/frv/Kconfig b/arch/frv/Kconfig index df2eb4bd9fa2..9d262645f667 100644 --- a/arch/frv/Kconfig +++ b/arch/frv/Kconfig | |||
@@ -12,8 +12,6 @@ config FRV | |||
12 | select ARCH_HAVE_NMI_SAFE_CMPXCHG | 12 | select ARCH_HAVE_NMI_SAFE_CMPXCHG |
13 | select GENERIC_CPU_DEVICES | 13 | select GENERIC_CPU_DEVICES |
14 | select ARCH_WANT_IPC_PARSE_VERSION | 14 | select ARCH_WANT_IPC_PARSE_VERSION |
15 | select GENERIC_KERNEL_THREAD | ||
16 | select GENERIC_KERNEL_EXECVE | ||
17 | 15 | ||
18 | config ZONE_DMA | 16 | config ZONE_DMA |
19 | bool | 17 | bool |
diff --git a/arch/frv/include/asm/unistd.h b/arch/frv/include/asm/unistd.h index 1807d8ea8cb5..d685da17f5fb 100644 --- a/arch/frv/include/asm/unistd.h +++ b/arch/frv/include/asm/unistd.h | |||
@@ -29,7 +29,6 @@ | |||
29 | #define __ARCH_WANT_SYS_SIGPROCMASK | 29 | #define __ARCH_WANT_SYS_SIGPROCMASK |
30 | #define __ARCH_WANT_SYS_RT_SIGACTION | 30 | #define __ARCH_WANT_SYS_RT_SIGACTION |
31 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 31 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
32 | #define __ARCH_WANT_SYS_EXECVE | ||
33 | #define __ARCH_WANT_SYS_FORK | 32 | #define __ARCH_WANT_SYS_FORK |
34 | #define __ARCH_WANT_SYS_VFORK | 33 | #define __ARCH_WANT_SYS_VFORK |
35 | #define __ARCH_WANT_SYS_CLONE | 34 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/h8300/Kconfig b/arch/h8300/Kconfig index 0ae445087607..2d2efb653ee0 100644 --- a/arch/h8300/Kconfig +++ b/arch/h8300/Kconfig | |||
@@ -9,8 +9,6 @@ config H8300 | |||
9 | select GENERIC_IRQ_SHOW | 9 | select GENERIC_IRQ_SHOW |
10 | select GENERIC_CPU_DEVICES | 10 | select GENERIC_CPU_DEVICES |
11 | select MODULES_USE_ELF_RELA | 11 | select MODULES_USE_ELF_RELA |
12 | select GENERIC_KERNEL_THREAD | ||
13 | select GENERIC_KERNEL_EXECVE | ||
14 | 12 | ||
15 | config SYMBOL_PREFIX | 13 | config SYMBOL_PREFIX |
16 | string | 14 | string |
diff --git a/arch/h8300/include/asm/ptrace.h b/arch/h8300/include/asm/ptrace.h index 79c9a91e75ef..c1826b95c5ca 100644 --- a/arch/h8300/include/asm/ptrace.h +++ b/arch/h8300/include/asm/ptrace.h | |||
@@ -28,5 +28,6 @@ | |||
28 | #define current_pt_regs() ((struct pt_regs *) \ | 28 | #define current_pt_regs() ((struct pt_regs *) \ |
29 | (THREAD_SIZE + (unsigned long)current_thread_info()) - 1) | 29 | (THREAD_SIZE + (unsigned long)current_thread_info()) - 1) |
30 | #define signal_pt_regs() ((struct pt_regs *)current->thread.esp0) | 30 | #define signal_pt_regs() ((struct pt_regs *)current->thread.esp0) |
31 | #define current_user_stack_pointer() rdusp() | ||
31 | #endif /* __ASSEMBLY__ */ | 32 | #endif /* __ASSEMBLY__ */ |
32 | #endif /* _H8300_PTRACE_H */ | 33 | #endif /* _H8300_PTRACE_H */ |
diff --git a/arch/h8300/include/asm/unistd.h b/arch/h8300/include/asm/unistd.h index 8215518b3f9f..aa38105959fb 100644 --- a/arch/h8300/include/asm/unistd.h +++ b/arch/h8300/include/asm/unistd.h | |||
@@ -31,7 +31,6 @@ | |||
31 | #define __ARCH_WANT_SYS_SIGPROCMASK | 31 | #define __ARCH_WANT_SYS_SIGPROCMASK |
32 | #define __ARCH_WANT_SYS_RT_SIGACTION | 32 | #define __ARCH_WANT_SYS_RT_SIGACTION |
33 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 33 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
34 | #define __ARCH_WANT_SYS_EXECVE | ||
35 | #define __ARCH_WANT_SYS_FORK | 34 | #define __ARCH_WANT_SYS_FORK |
36 | #define __ARCH_WANT_SYS_VFORK | 35 | #define __ARCH_WANT_SYS_VFORK |
37 | #define __ARCH_WANT_SYS_CLONE | 36 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/h8300/include/uapi/asm/signal.h b/arch/h8300/include/uapi/asm/signal.h index 913729e581e8..af3a6c37fee6 100644 --- a/arch/h8300/include/uapi/asm/signal.h +++ b/arch/h8300/include/uapi/asm/signal.h | |||
@@ -82,12 +82,6 @@ typedef unsigned long sigset_t; | |||
82 | 82 | ||
83 | #define SA_RESTORER 0x04000000 | 83 | #define SA_RESTORER 0x04000000 |
84 | 84 | ||
85 | /* | ||
86 | * sigaltstack controls | ||
87 | */ | ||
88 | #define SS_ONSTACK 1 | ||
89 | #define SS_DISABLE 2 | ||
90 | |||
91 | #define MINSIGSTKSZ 2048 | 85 | #define MINSIGSTKSZ 2048 |
92 | #define SIGSTKSZ 8192 | 86 | #define SIGSTKSZ 8192 |
93 | 87 | ||
diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig index e418803b6c8e..0744f7d7b1fd 100644 --- a/arch/hexagon/Kconfig +++ b/arch/hexagon/Kconfig | |||
@@ -31,8 +31,6 @@ config HEXAGON | |||
31 | select GENERIC_CLOCKEVENTS | 31 | select GENERIC_CLOCKEVENTS |
32 | select GENERIC_CLOCKEVENTS_BROADCAST | 32 | select GENERIC_CLOCKEVENTS_BROADCAST |
33 | select MODULES_USE_ELF_RELA | 33 | select MODULES_USE_ELF_RELA |
34 | select GENERIC_KERNEL_THREAD | ||
35 | select GENERIC_KERNEL_EXECVE | ||
36 | ---help--- | 34 | ---help--- |
37 | Qualcomm Hexagon is a processor architecture designed for high | 35 | Qualcomm Hexagon is a processor architecture designed for high |
38 | performance and low power across a wide variety of applications. | 36 | performance and low power across a wide variety of applications. |
diff --git a/arch/hexagon/include/uapi/asm/unistd.h b/arch/hexagon/include/uapi/asm/unistd.h index 2af81533bd0f..4a87cc47075c 100644 --- a/arch/hexagon/include/uapi/asm/unistd.h +++ b/arch/hexagon/include/uapi/asm/unistd.h | |||
@@ -27,7 +27,6 @@ | |||
27 | */ | 27 | */ |
28 | 28 | ||
29 | #define sys_mmap2 sys_mmap_pgoff | 29 | #define sys_mmap2 sys_mmap_pgoff |
30 | #define __ARCH_WANT_SYS_EXECVE | ||
31 | #define __ARCH_WANT_SYS_CLONE | 30 | #define __ARCH_WANT_SYS_CLONE |
32 | 31 | ||
33 | #include <asm-generic/unistd.h> | 32 | #include <asm-generic/unistd.h> |
diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig index 670600468128..3279646120e3 100644 --- a/arch/ia64/Kconfig +++ b/arch/ia64/Kconfig | |||
@@ -42,8 +42,6 @@ config IA64 | |||
42 | select GENERIC_TIME_VSYSCALL_OLD | 42 | select GENERIC_TIME_VSYSCALL_OLD |
43 | select HAVE_MOD_ARCH_SPECIFIC | 43 | select HAVE_MOD_ARCH_SPECIFIC |
44 | select MODULES_USE_ELF_RELA | 44 | select MODULES_USE_ELF_RELA |
45 | select GENERIC_KERNEL_THREAD | ||
46 | select GENERIC_KERNEL_EXECVE | ||
47 | default y | 45 | default y |
48 | help | 46 | help |
49 | The Itanium Processor Family is Intel's 64-bit successor to | 47 | The Itanium Processor Family is Intel's 64-bit successor to |
diff --git a/arch/ia64/include/asm/ptrace.h b/arch/ia64/include/asm/ptrace.h index b0e973649cb9..845143990a1d 100644 --- a/arch/ia64/include/asm/ptrace.h +++ b/arch/ia64/include/asm/ptrace.h | |||
@@ -78,6 +78,11 @@ static inline long regs_return_value(struct pt_regs *regs) | |||
78 | unsigned long __ip = instruction_pointer(regs); \ | 78 | unsigned long __ip = instruction_pointer(regs); \ |
79 | (__ip & ~3UL) + ((__ip & 3UL) << 2); \ | 79 | (__ip & ~3UL) + ((__ip & 3UL) << 2); \ |
80 | }) | 80 | }) |
81 | /* | ||
82 | * Why not default? Because user_stack_pointer() on ia64 gives register | ||
83 | * stack backing store instead... | ||
84 | */ | ||
85 | #define current_user_stack_pointer() (current_pt_regs()->r12) | ||
81 | 86 | ||
82 | /* given a pointer to a task_struct, return the user's pt_regs */ | 87 | /* given a pointer to a task_struct, return the user's pt_regs */ |
83 | # define task_pt_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1) | 88 | # define task_pt_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1) |
diff --git a/arch/ia64/include/asm/unistd.h b/arch/ia64/include/asm/unistd.h index 1574bca86138..8b3ff2f5b861 100644 --- a/arch/ia64/include/asm/unistd.h +++ b/arch/ia64/include/asm/unistd.h | |||
@@ -29,7 +29,6 @@ | |||
29 | 29 | ||
30 | #define __ARCH_WANT_SYS_RT_SIGACTION | 30 | #define __ARCH_WANT_SYS_RT_SIGACTION |
31 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 31 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
32 | #define __ARCH_WANT_SYS_EXECVE | ||
33 | 32 | ||
34 | #if !defined(__ASSEMBLY__) && !defined(ASSEMBLER) | 33 | #if !defined(__ASSEMBLY__) && !defined(ASSEMBLER) |
35 | 34 | ||
diff --git a/arch/ia64/include/uapi/asm/signal.h b/arch/ia64/include/uapi/asm/signal.h index e531c424434c..c0ea2855e96b 100644 --- a/arch/ia64/include/uapi/asm/signal.h +++ b/arch/ia64/include/uapi/asm/signal.h | |||
@@ -79,12 +79,6 @@ | |||
79 | #define SA_RESTORER 0x04000000 | 79 | #define SA_RESTORER 0x04000000 |
80 | 80 | ||
81 | /* | 81 | /* |
82 | * sigaltstack controls | ||
83 | */ | ||
84 | #define SS_ONSTACK 1 | ||
85 | #define SS_DISABLE 2 | ||
86 | |||
87 | /* | ||
88 | * The minimum stack size needs to be fairly large because we want to | 82 | * The minimum stack size needs to be fairly large because we want to |
89 | * be sure that an app compiled for today's CPUs will continue to run | 83 | * be sure that an app compiled for today's CPUs will continue to run |
90 | * on all future CPU models. The CPU model matters because the signal | 84 | * on all future CPU models. The CPU model matters because the signal |
diff --git a/arch/m32r/Kconfig b/arch/m32r/Kconfig index 5183f43a2cf7..f807721e19a5 100644 --- a/arch/m32r/Kconfig +++ b/arch/m32r/Kconfig | |||
@@ -15,8 +15,6 @@ config M32R | |||
15 | select GENERIC_ATOMIC64 | 15 | select GENERIC_ATOMIC64 |
16 | select ARCH_USES_GETTIMEOFFSET | 16 | select ARCH_USES_GETTIMEOFFSET |
17 | select MODULES_USE_ELF_RELA | 17 | select MODULES_USE_ELF_RELA |
18 | select GENERIC_KERNEL_THREAD | ||
19 | select GENERIC_KERNEL_EXECVE | ||
20 | 18 | ||
21 | config SBUS | 19 | config SBUS |
22 | bool | 20 | bool |
diff --git a/arch/m32r/include/asm/ptrace.h b/arch/m32r/include/asm/ptrace.h index ba487c554dbb..fa58ccfff865 100644 --- a/arch/m32r/include/asm/ptrace.h +++ b/arch/m32r/include/asm/ptrace.h | |||
@@ -32,6 +32,7 @@ extern void init_debug_traps(struct task_struct *); | |||
32 | 32 | ||
33 | #define instruction_pointer(regs) ((regs)->bpc) | 33 | #define instruction_pointer(regs) ((regs)->bpc) |
34 | #define profile_pc(regs) instruction_pointer(regs) | 34 | #define profile_pc(regs) instruction_pointer(regs) |
35 | #define user_stack_pointer(regs) ((regs)->spu) | ||
35 | 36 | ||
36 | extern void withdraw_debug_trap(struct pt_regs *regs); | 37 | extern void withdraw_debug_trap(struct pt_regs *regs); |
37 | 38 | ||
diff --git a/arch/m32r/include/asm/unistd.h b/arch/m32r/include/asm/unistd.h index 1eade32082b8..79b063caec85 100644 --- a/arch/m32r/include/asm/unistd.h +++ b/arch/m32r/include/asm/unistd.h | |||
@@ -22,7 +22,6 @@ | |||
22 | #define __ARCH_WANT_SYS_OLDUMOUNT | 22 | #define __ARCH_WANT_SYS_OLDUMOUNT |
23 | #define __ARCH_WANT_SYS_RT_SIGACTION | 23 | #define __ARCH_WANT_SYS_RT_SIGACTION |
24 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 24 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
25 | #define __ARCH_WANT_SYS_EXECVE | ||
26 | #define __ARCH_WANT_SYS_CLONE | 25 | #define __ARCH_WANT_SYS_CLONE |
27 | #define __ARCH_WANT_SYS_FORK | 26 | #define __ARCH_WANT_SYS_FORK |
28 | #define __ARCH_WANT_SYS_VFORK | 27 | #define __ARCH_WANT_SYS_VFORK |
diff --git a/arch/m32r/include/uapi/asm/signal.h b/arch/m32r/include/uapi/asm/signal.h index ef9788fda2ef..54acacb1f1f7 100644 --- a/arch/m32r/include/uapi/asm/signal.h +++ b/arch/m32r/include/uapi/asm/signal.h | |||
@@ -84,12 +84,6 @@ typedef unsigned long sigset_t; | |||
84 | 84 | ||
85 | #define SA_RESTORER 0x04000000 | 85 | #define SA_RESTORER 0x04000000 |
86 | 86 | ||
87 | /* | ||
88 | * sigaltstack controls | ||
89 | */ | ||
90 | #define SS_ONSTACK 1 | ||
91 | #define SS_DISABLE 2 | ||
92 | |||
93 | #define MINSIGSTKSZ 2048 | 87 | #define MINSIGSTKSZ 2048 |
94 | #define SIGSTKSZ 8192 | 88 | #define SIGSTKSZ 8192 |
95 | 89 | ||
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index 953a7ba5d050..6710084e072a 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig | |||
@@ -15,8 +15,6 @@ config M68K | |||
15 | select FPU if MMU | 15 | select FPU if MMU |
16 | select ARCH_WANT_IPC_PARSE_VERSION | 16 | select ARCH_WANT_IPC_PARSE_VERSION |
17 | select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE | 17 | select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE |
18 | select GENERIC_KERNEL_THREAD | ||
19 | select GENERIC_KERNEL_EXECVE | ||
20 | select HAVE_MOD_ARCH_SPECIFIC | 18 | select HAVE_MOD_ARCH_SPECIFIC |
21 | select MODULES_USE_ELF_REL | 19 | select MODULES_USE_ELF_REL |
22 | select MODULES_USE_ELF_RELA | 20 | select MODULES_USE_ELF_RELA |
diff --git a/arch/m68k/include/asm/ptrace.h b/arch/m68k/include/asm/ptrace.h index 0f717045bdde..a45cb6894ad3 100644 --- a/arch/m68k/include/asm/ptrace.h +++ b/arch/m68k/include/asm/ptrace.h | |||
@@ -15,6 +15,7 @@ | |||
15 | #define profile_pc(regs) instruction_pointer(regs) | 15 | #define profile_pc(regs) instruction_pointer(regs) |
16 | #define current_pt_regs() \ | 16 | #define current_pt_regs() \ |
17 | (struct pt_regs *)((char *)current_thread_info() + THREAD_SIZE) - 1 | 17 | (struct pt_regs *)((char *)current_thread_info() + THREAD_SIZE) - 1 |
18 | #define current_user_stack_pointer() rdusp() | ||
18 | 19 | ||
19 | #define arch_has_single_step() (1) | 20 | #define arch_has_single_step() (1) |
20 | 21 | ||
diff --git a/arch/m68k/include/asm/unistd.h b/arch/m68k/include/asm/unistd.h index a021d67cdd72..847994ce6804 100644 --- a/arch/m68k/include/asm/unistd.h +++ b/arch/m68k/include/asm/unistd.h | |||
@@ -31,7 +31,6 @@ | |||
31 | #define __ARCH_WANT_SYS_SIGPROCMASK | 31 | #define __ARCH_WANT_SYS_SIGPROCMASK |
32 | #define __ARCH_WANT_SYS_RT_SIGACTION | 32 | #define __ARCH_WANT_SYS_RT_SIGACTION |
33 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 33 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
34 | #define __ARCH_WANT_SYS_EXECVE | ||
35 | #define __ARCH_WANT_SYS_FORK | 34 | #define __ARCH_WANT_SYS_FORK |
36 | #define __ARCH_WANT_SYS_VFORK | 35 | #define __ARCH_WANT_SYS_VFORK |
37 | 36 | ||
diff --git a/arch/m68k/include/uapi/asm/signal.h b/arch/m68k/include/uapi/asm/signal.h index 2b450f311bd9..cba6f858bb46 100644 --- a/arch/m68k/include/uapi/asm/signal.h +++ b/arch/m68k/include/uapi/asm/signal.h | |||
@@ -80,12 +80,6 @@ typedef unsigned long sigset_t; | |||
80 | #define SA_NOMASK SA_NODEFER | 80 | #define SA_NOMASK SA_NODEFER |
81 | #define SA_ONESHOT SA_RESETHAND | 81 | #define SA_ONESHOT SA_RESETHAND |
82 | 82 | ||
83 | /* | ||
84 | * sigaltstack controls | ||
85 | */ | ||
86 | #define SS_ONSTACK 1 | ||
87 | #define SS_DISABLE 2 | ||
88 | |||
89 | #define MINSIGSTKSZ 2048 | 83 | #define MINSIGSTKSZ 2048 |
90 | #define SIGSTKSZ 8192 | 84 | #define SIGSTKSZ 8192 |
91 | 85 | ||
diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig index 4bcf89148f3c..ba3b7c8c04b8 100644 --- a/arch/microblaze/Kconfig +++ b/arch/microblaze/Kconfig | |||
@@ -26,8 +26,6 @@ config MICROBLAZE | |||
26 | select GENERIC_ATOMIC64 | 26 | select GENERIC_ATOMIC64 |
27 | select GENERIC_CLOCKEVENTS | 27 | select GENERIC_CLOCKEVENTS |
28 | select MODULES_USE_ELF_RELA | 28 | select MODULES_USE_ELF_RELA |
29 | select GENERIC_KERNEL_THREAD | ||
30 | select GENERIC_KERNEL_EXECVE | ||
31 | select CLONE_BACKWARDS | 29 | select CLONE_BACKWARDS |
32 | 30 | ||
33 | config SWAP | 31 | config SWAP |
diff --git a/arch/microblaze/include/asm/ptrace.h b/arch/microblaze/include/asm/ptrace.h index 3732bcf186fd..5b18ec124e51 100644 --- a/arch/microblaze/include/asm/ptrace.h +++ b/arch/microblaze/include/asm/ptrace.h | |||
@@ -16,6 +16,7 @@ | |||
16 | 16 | ||
17 | #define instruction_pointer(regs) ((regs)->pc) | 17 | #define instruction_pointer(regs) ((regs)->pc) |
18 | #define profile_pc(regs) instruction_pointer(regs) | 18 | #define profile_pc(regs) instruction_pointer(regs) |
19 | #define user_stack_pointer(regs) ((regs)->r1) | ||
19 | 20 | ||
20 | static inline long regs_return_value(struct pt_regs *regs) | 21 | static inline long regs_return_value(struct pt_regs *regs) |
21 | { | 22 | { |
diff --git a/arch/microblaze/include/asm/unistd.h b/arch/microblaze/include/asm/unistd.h index 99e23937a31a..a5f06ac97113 100644 --- a/arch/microblaze/include/asm/unistd.h +++ b/arch/microblaze/include/asm/unistd.h | |||
@@ -35,7 +35,6 @@ | |||
35 | #define __ARCH_WANT_SYS_SIGPROCMASK | 35 | #define __ARCH_WANT_SYS_SIGPROCMASK |
36 | #define __ARCH_WANT_SYS_RT_SIGACTION | 36 | #define __ARCH_WANT_SYS_RT_SIGACTION |
37 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 37 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
38 | #define __ARCH_WANT_SYS_EXECVE | ||
39 | #define __ARCH_WANT_SYS_CLONE | 38 | #define __ARCH_WANT_SYS_CLONE |
40 | #define __ARCH_WANT_SYS_VFORK | 39 | #define __ARCH_WANT_SYS_VFORK |
41 | #ifdef CONFIG_MMU | 40 | #ifdef CONFIG_MMU |
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index d971d1586f1c..b7dc39c6c849 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig | |||
@@ -41,8 +41,6 @@ config MIPS | |||
41 | select HAVE_MOD_ARCH_SPECIFIC | 41 | select HAVE_MOD_ARCH_SPECIFIC |
42 | select MODULES_USE_ELF_REL | 42 | select MODULES_USE_ELF_REL |
43 | select MODULES_USE_ELF_RELA if 64BIT | 43 | select MODULES_USE_ELF_RELA if 64BIT |
44 | select GENERIC_KERNEL_THREAD | ||
45 | select GENERIC_KERNEL_EXECVE | ||
46 | 44 | ||
47 | menu "Machine selection" | 45 | menu "Machine selection" |
48 | 46 | ||
diff --git a/arch/mips/include/asm/ptrace.h b/arch/mips/include/asm/ptrace.h index cec5e125f7e4..a3186f2bb8a0 100644 --- a/arch/mips/include/asm/ptrace.h +++ b/arch/mips/include/asm/ptrace.h | |||
@@ -49,6 +49,7 @@ static inline long regs_return_value(struct pt_regs *regs) | |||
49 | 49 | ||
50 | #define instruction_pointer(regs) ((regs)->cp0_epc) | 50 | #define instruction_pointer(regs) ((regs)->cp0_epc) |
51 | #define profile_pc(regs) instruction_pointer(regs) | 51 | #define profile_pc(regs) instruction_pointer(regs) |
52 | #define user_stack_pointer(r) ((r)->regs[29]) | ||
52 | 53 | ||
53 | extern asmlinkage void syscall_trace_enter(struct pt_regs *regs); | 54 | extern asmlinkage void syscall_trace_enter(struct pt_regs *regs); |
54 | extern asmlinkage void syscall_trace_leave(struct pt_regs *regs); | 55 | extern asmlinkage void syscall_trace_leave(struct pt_regs *regs); |
diff --git a/arch/mips/include/asm/unistd.h b/arch/mips/include/asm/unistd.h index b306e2081cad..9e47cc11aa26 100644 --- a/arch/mips/include/asm/unistd.h +++ b/arch/mips/include/asm/unistd.h | |||
@@ -20,7 +20,6 @@ | |||
20 | #define __ARCH_OMIT_COMPAT_SYS_GETDENTS64 | 20 | #define __ARCH_OMIT_COMPAT_SYS_GETDENTS64 |
21 | #define __ARCH_WANT_OLD_READDIR | 21 | #define __ARCH_WANT_OLD_READDIR |
22 | #define __ARCH_WANT_SYS_ALARM | 22 | #define __ARCH_WANT_SYS_ALARM |
23 | #define __ARCH_WANT_SYS_EXECVE | ||
24 | #define __ARCH_WANT_SYS_GETHOSTNAME | 23 | #define __ARCH_WANT_SYS_GETHOSTNAME |
25 | #define __ARCH_WANT_SYS_IPC | 24 | #define __ARCH_WANT_SYS_IPC |
26 | #define __ARCH_WANT_SYS_PAUSE | 25 | #define __ARCH_WANT_SYS_PAUSE |
diff --git a/arch/mips/include/uapi/asm/signal.h b/arch/mips/include/uapi/asm/signal.h index 3f1237c6c80e..770732cb8d03 100644 --- a/arch/mips/include/uapi/asm/signal.h +++ b/arch/mips/include/uapi/asm/signal.h | |||
@@ -86,12 +86,6 @@ typedef unsigned long old_sigset_t; /* at least 32 bits */ | |||
86 | 86 | ||
87 | #define SA_RESTORER 0x04000000 /* Only for o32 */ | 87 | #define SA_RESTORER 0x04000000 /* Only for o32 */ |
88 | 88 | ||
89 | /* | ||
90 | * sigaltstack controls | ||
91 | */ | ||
92 | #define SS_ONSTACK 1 | ||
93 | #define SS_DISABLE 2 | ||
94 | |||
95 | #define MINSIGSTKSZ 2048 | 89 | #define MINSIGSTKSZ 2048 |
96 | #define SIGSTKSZ 8192 | 90 | #define SIGSTKSZ 8192 |
97 | 91 | ||
diff --git a/arch/mn10300/Kconfig b/arch/mn10300/Kconfig index 72471744a912..aa03f2e13385 100644 --- a/arch/mn10300/Kconfig +++ b/arch/mn10300/Kconfig | |||
@@ -8,8 +8,6 @@ config MN10300 | |||
8 | select HAVE_ARCH_KGDB | 8 | select HAVE_ARCH_KGDB |
9 | select HAVE_NMI_WATCHDOG if MN10300_WD_TIMER | 9 | select HAVE_NMI_WATCHDOG if MN10300_WD_TIMER |
10 | select GENERIC_CLOCKEVENTS | 10 | select GENERIC_CLOCKEVENTS |
11 | select GENERIC_KERNEL_THREAD | ||
12 | select GENERIC_KERNEL_EXECVE | ||
13 | select MODULES_USE_ELF_RELA | 11 | select MODULES_USE_ELF_RELA |
14 | 12 | ||
15 | config AM33_2 | 13 | config AM33_2 |
diff --git a/arch/mn10300/include/asm/unistd.h b/arch/mn10300/include/asm/unistd.h index cabf8ba73b27..e6d2ed4ba68f 100644 --- a/arch/mn10300/include/asm/unistd.h +++ b/arch/mn10300/include/asm/unistd.h | |||
@@ -43,7 +43,6 @@ | |||
43 | #define __ARCH_WANT_SYS_SIGPROCMASK | 43 | #define __ARCH_WANT_SYS_SIGPROCMASK |
44 | #define __ARCH_WANT_SYS_RT_SIGACTION | 44 | #define __ARCH_WANT_SYS_RT_SIGACTION |
45 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 45 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
46 | #define __ARCH_WANT_SYS_EXECVE | ||
47 | #define __ARCH_WANT_SYS_FORK | 46 | #define __ARCH_WANT_SYS_FORK |
48 | #define __ARCH_WANT_SYS_VFORK | 47 | #define __ARCH_WANT_SYS_VFORK |
49 | #define __ARCH_WANT_SYS_CLONE | 48 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/mn10300/include/uapi/asm/signal.h b/arch/mn10300/include/uapi/asm/signal.h index 08dcd6a85618..f423a08d7eeb 100644 --- a/arch/mn10300/include/uapi/asm/signal.h +++ b/arch/mn10300/include/uapi/asm/signal.h | |||
@@ -92,12 +92,6 @@ typedef unsigned long sigset_t; | |||
92 | 92 | ||
93 | #define SA_RESTORER 0x04000000 | 93 | #define SA_RESTORER 0x04000000 |
94 | 94 | ||
95 | /* | ||
96 | * sigaltstack controls | ||
97 | */ | ||
98 | #define SS_ONSTACK 1 | ||
99 | #define SS_DISABLE 2 | ||
100 | |||
101 | #define MINSIGSTKSZ 2048 | 95 | #define MINSIGSTKSZ 2048 |
102 | #define SIGSTKSZ 8192 | 96 | #define SIGSTKSZ 8192 |
103 | 97 | ||
diff --git a/arch/openrisc/Kconfig b/arch/openrisc/Kconfig index ec37e185d20d..0ac66f67521f 100644 --- a/arch/openrisc/Kconfig +++ b/arch/openrisc/Kconfig | |||
@@ -22,8 +22,6 @@ config OPENRISC | |||
22 | select GENERIC_STRNCPY_FROM_USER | 22 | select GENERIC_STRNCPY_FROM_USER |
23 | select GENERIC_STRNLEN_USER | 23 | select GENERIC_STRNLEN_USER |
24 | select MODULES_USE_ELF_RELA | 24 | select MODULES_USE_ELF_RELA |
25 | select GENERIC_KERNEL_THREAD | ||
26 | select GENERIC_KERNEL_EXECVE | ||
27 | 25 | ||
28 | config MMU | 26 | config MMU |
29 | def_bool y | 27 | def_bool y |
diff --git a/arch/openrisc/include/uapi/asm/unistd.h b/arch/openrisc/include/uapi/asm/unistd.h index 5082b8066325..ce40b71df006 100644 --- a/arch/openrisc/include/uapi/asm/unistd.h +++ b/arch/openrisc/include/uapi/asm/unistd.h | |||
@@ -20,7 +20,6 @@ | |||
20 | 20 | ||
21 | #define sys_mmap2 sys_mmap_pgoff | 21 | #define sys_mmap2 sys_mmap_pgoff |
22 | 22 | ||
23 | #define __ARCH_WANT_SYS_EXECVE | ||
24 | #define __ARCH_WANT_SYS_FORK | 23 | #define __ARCH_WANT_SYS_FORK |
25 | #define __ARCH_WANT_SYS_CLONE | 24 | #define __ARCH_WANT_SYS_CLONE |
26 | 25 | ||
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index e688a2be30f6..b77feffbadea 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig | |||
@@ -22,8 +22,6 @@ config PARISC | |||
22 | select GENERIC_STRNCPY_FROM_USER | 22 | select GENERIC_STRNCPY_FROM_USER |
23 | select HAVE_MOD_ARCH_SPECIFIC | 23 | select HAVE_MOD_ARCH_SPECIFIC |
24 | select MODULES_USE_ELF_RELA | 24 | select MODULES_USE_ELF_RELA |
25 | select GENERIC_KERNEL_THREAD | ||
26 | select GENERIC_KERNEL_EXECVE | ||
27 | select CLONE_BACKWARDS | 25 | select CLONE_BACKWARDS |
28 | 26 | ||
29 | help | 27 | help |
diff --git a/arch/parisc/include/asm/unistd.h b/arch/parisc/include/asm/unistd.h index 1efef41659c9..3043194547cd 100644 --- a/arch/parisc/include/asm/unistd.h +++ b/arch/parisc/include/asm/unistd.h | |||
@@ -163,7 +163,6 @@ type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \ | |||
163 | #define __ARCH_WANT_SYS_RT_SIGACTION | 163 | #define __ARCH_WANT_SYS_RT_SIGACTION |
164 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND | 164 | #define __ARCH_WANT_SYS_RT_SIGSUSPEND |
165 | #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND | 165 | #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND |
166 | #define __ARCH_WANT_SYS_EXECVE | ||
167 | #define __ARCH_WANT_SYS_FORK | 166 | #define __ARCH_WANT_SYS_FORK |
168 | #define __ARCH_WANT_SYS_VFORK | 167 | #define __ARCH_WANT_SYS_VFORK |
169 | #define __ARCH_WANT_SYS_CLONE | 168 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/parisc/include/uapi/asm/signal.h b/arch/parisc/include/uapi/asm/signal.h index b1ddaa243376..a2fa297196bc 100644 --- a/arch/parisc/include/uapi/asm/signal.h +++ b/arch/parisc/include/uapi/asm/signal.h | |||
@@ -71,12 +71,6 @@ | |||
71 | 71 | ||
72 | #define SA_RESTORER 0x04000000 /* obsolete -- ignored */ | 72 | #define SA_RESTORER 0x04000000 /* obsolete -- ignored */ |
73 | 73 | ||
74 | /* | ||
75 | * sigaltstack controls | ||
76 | */ | ||
77 | #define SS_ONSTACK 1 | ||
78 | #define SS_DISABLE 2 | ||
79 | |||
80 | #define MINSIGSTKSZ 2048 | 74 | #define MINSIGSTKSZ 2048 |
81 | #define SIGSTKSZ 8192 | 75 | #define SIGSTKSZ 8192 |
82 | 76 | ||
diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 951a517a1a0f..17903f1f356b 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig | |||
@@ -141,10 +141,8 @@ config PPC | |||
141 | select GENERIC_CLOCKEVENTS | 141 | select GENERIC_CLOCKEVENTS |
142 | select GENERIC_STRNCPY_FROM_USER | 142 | select GENERIC_STRNCPY_FROM_USER |
143 | select GENERIC_STRNLEN_USER | 143 | select GENERIC_STRNLEN_USER |
144 | select GENERIC_KERNEL_THREAD | ||
145 | select HAVE_MOD_ARCH_SPECIFIC | 144 | select HAVE_MOD_ARCH_SPECIFIC |
146 | select MODULES_USE_ELF_RELA | 145 | select MODULES_USE_ELF_RELA |
147 | select GENERIC_KERNEL_EXECVE | ||
148 | select CLONE_BACKWARDS | 146 | select CLONE_BACKWARDS |
149 | 147 | ||
150 | config EARLY_PRINTK | 148 | config EARLY_PRINTK |
diff --git a/arch/powerpc/include/asm/unistd.h b/arch/powerpc/include/asm/unistd.h index 29365e15ed7c..1d4864a40e35 100644 --- a/arch/powerpc/include/asm/unistd.h +++ b/arch/powerpc/include/asm/unistd.h | |||
@@ -56,7 +56,6 @@ | |||
56 | #define __ARCH_WANT_COMPAT_SYS_SENDFILE | 56 | #define __ARCH_WANT_COMPAT_SYS_SENDFILE |
57 | #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL | 57 | #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL |
58 | #endif | 58 | #endif |
59 | #define __ARCH_WANT_SYS_EXECVE | ||
60 | #define __ARCH_WANT_SYS_FORK | 59 | #define __ARCH_WANT_SYS_FORK |
61 | #define __ARCH_WANT_SYS_VFORK | 60 | #define __ARCH_WANT_SYS_VFORK |
62 | #define __ARCH_WANT_SYS_CLONE | 61 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/powerpc/include/uapi/asm/signal.h b/arch/powerpc/include/uapi/asm/signal.h index 48fa8d3f2f9a..e079fb39d5bc 100644 --- a/arch/powerpc/include/uapi/asm/signal.h +++ b/arch/powerpc/include/uapi/asm/signal.h | |||
@@ -85,12 +85,6 @@ typedef struct { | |||
85 | 85 | ||
86 | #define SA_RESTORER 0x04000000U | 86 | #define SA_RESTORER 0x04000000U |
87 | 87 | ||
88 | /* | ||
89 | * sigaltstack controls | ||
90 | */ | ||
91 | #define SS_ONSTACK 1 | ||
92 | #define SS_DISABLE 2 | ||
93 | |||
94 | #define MINSIGSTKSZ 2048 | 88 | #define MINSIGSTKSZ 2048 |
95 | #define SIGSTKSZ 8192 | 89 | #define SIGSTKSZ 8192 |
96 | 90 | ||
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 32425af9d68d..b5ea38c25647 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
@@ -137,8 +137,6 @@ config S390 | |||
137 | select GENERIC_CLOCKEVENTS | 137 | select GENERIC_CLOCKEVENTS |
138 | select KTIME_SCALAR if 32BIT | 138 | select KTIME_SCALAR if 32BIT |
139 | select HAVE_ARCH_SECCOMP_FILTER | 139 | select HAVE_ARCH_SECCOMP_FILTER |
140 | select GENERIC_KERNEL_THREAD | ||
141 | select GENERIC_KERNEL_EXECVE | ||
142 | select HAVE_MOD_ARCH_SPECIFIC | 140 | select HAVE_MOD_ARCH_SPECIFIC |
143 | select MODULES_USE_ELF_RELA | 141 | select MODULES_USE_ELF_RELA |
144 | select CLONE_BACKWARDS2 | 142 | select CLONE_BACKWARDS2 |
diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h index 18cd6b592650..f8c6df6cd1f0 100644 --- a/arch/s390/include/asm/compat.h +++ b/arch/s390/include/asm/compat.h | |||
@@ -7,6 +7,9 @@ | |||
7 | #include <linux/sched.h> | 7 | #include <linux/sched.h> |
8 | #include <linux/thread_info.h> | 8 | #include <linux/thread_info.h> |
9 | 9 | ||
10 | #define __TYPE_IS_PTR(t) (!__builtin_types_compatible_p(typeof(0?(t)0:0ULL), u64)) | ||
11 | #define __SC_DELOUSE(t,v) (t)(__TYPE_IS_PTR(t) ? ((v) & 0x7fffffff) : (v)) | ||
12 | |||
10 | #define PSW32_MASK_PER 0x40000000UL | 13 | #define PSW32_MASK_PER 0x40000000UL |
11 | #define PSW32_MASK_DAT 0x04000000UL | 14 | #define PSW32_MASK_DAT 0x04000000UL |
12 | #define PSW32_MASK_IO 0x02000000UL | 15 | #define PSW32_MASK_IO 0x02000000UL |
diff --git a/arch/s390/include/asm/unistd.h b/arch/s390/include/asm/unistd.h index 086bb8eaf6ab..636530872516 100644 --- a/arch/s390/include/asm/unistd.h +++ b/arch/s390/include/asm/unistd.h | |||
@@ -53,7 +53,6 @@ | |||
53 | # define __ARCH_WANT_COMPAT_SYS_TIME | 53 | # define __ARCH_WANT_COMPAT_SYS_TIME |
54 | # define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND | 54 | # define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND |
55 | # endif | 55 | # endif |
56 | #define __ARCH_WANT_SYS_EXECVE | ||
57 | #define __ARCH_WANT_SYS_FORK | 56 | #define __ARCH_WANT_SYS_FORK |
58 | #define __ARCH_WANT_SYS_VFORK | 57 | #define __ARCH_WANT_SYS_VFORK |
59 | #define __ARCH_WANT_SYS_CLONE | 58 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/s390/include/uapi/asm/signal.h b/arch/s390/include/uapi/asm/signal.h index 8c6a49e392ee..2f43cfbf5f1a 100644 --- a/arch/s390/include/uapi/asm/signal.h +++ b/arch/s390/include/uapi/asm/signal.h | |||
@@ -90,12 +90,6 @@ typedef unsigned long sigset_t; | |||
90 | 90 | ||
91 | #define SA_RESTORER 0x04000000 | 91 | #define SA_RESTORER 0x04000000 |
92 | 92 | ||
93 | /* | ||
94 | * sigaltstack controls | ||
95 | */ | ||
96 | #define SS_ONSTACK 1 | ||
97 | #define SS_DISABLE 2 | ||
98 | |||
99 | #define MINSIGSTKSZ 2048 | 93 | #define MINSIGSTKSZ 2048 |
100 | #define SIGSTKSZ 8192 | 94 | #define SIGSTKSZ 8192 |
101 | 95 | ||
diff --git a/arch/score/Kconfig b/arch/score/Kconfig index 45893390c7dd..3b1482e7afac 100644 --- a/arch/score/Kconfig +++ b/arch/score/Kconfig | |||
@@ -13,8 +13,6 @@ config SCORE | |||
13 | select GENERIC_CLOCKEVENTS | 13 | select GENERIC_CLOCKEVENTS |
14 | select HAVE_MOD_ARCH_SPECIFIC | 14 | select HAVE_MOD_ARCH_SPECIFIC |
15 | select MODULES_USE_ELF_REL | 15 | select MODULES_USE_ELF_REL |
16 | select GENERIC_KERNEL_THREAD | ||
17 | select GENERIC_KERNEL_EXECVE | ||
18 | select CLONE_BACKWARDS | 16 | select CLONE_BACKWARDS |
19 | 17 | ||
20 | choice | 18 | choice |
diff --git a/arch/score/include/asm/ptrace.h b/arch/score/include/asm/ptrace.h index 78fc538db84c..abc279d96b73 100644 --- a/arch/score/include/asm/ptrace.h +++ b/arch/score/include/asm/ptrace.h | |||
@@ -13,6 +13,7 @@ struct task_struct; | |||
13 | 13 | ||
14 | #define instruction_pointer(regs) ((unsigned long)(regs)->cp0_epc) | 14 | #define instruction_pointer(regs) ((unsigned long)(regs)->cp0_epc) |
15 | #define profile_pc(regs) instruction_pointer(regs) | 15 | #define profile_pc(regs) instruction_pointer(regs) |
16 | #define user_stack_pointer(r) ((unsigned long)(r)->regs[0]) | ||
16 | 17 | ||
17 | extern void do_syscall_trace(struct pt_regs *regs, int entryexit); | 18 | extern void do_syscall_trace(struct pt_regs *regs, int entryexit); |
18 | extern int read_tsk_long(struct task_struct *, unsigned long, unsigned long *); | 19 | extern int read_tsk_long(struct task_struct *, unsigned long, unsigned long *); |
diff --git a/arch/score/include/uapi/asm/unistd.h b/arch/score/include/uapi/asm/unistd.h index 56001c93095a..9cb4260a5f3e 100644 --- a/arch/score/include/uapi/asm/unistd.h +++ b/arch/score/include/uapi/asm/unistd.h | |||
@@ -4,7 +4,6 @@ | |||
4 | #define __ARCH_WANT_SYSCALL_NO_FLAGS | 4 | #define __ARCH_WANT_SYSCALL_NO_FLAGS |
5 | #define __ARCH_WANT_SYSCALL_OFF_T | 5 | #define __ARCH_WANT_SYSCALL_OFF_T |
6 | #define __ARCH_WANT_SYSCALL_DEPRECATED | 6 | #define __ARCH_WANT_SYSCALL_DEPRECATED |
7 | #define __ARCH_WANT_SYS_EXECVE | ||
8 | #define __ARCH_WANT_SYS_CLONE | 7 | #define __ARCH_WANT_SYS_CLONE |
9 | #define __ARCH_WANT_SYS_FORK | 8 | #define __ARCH_WANT_SYS_FORK |
10 | #define __ARCH_WANT_SYS_VFORK | 9 | #define __ARCH_WANT_SYS_VFORK |
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 8451317eed58..babc2b826c5c 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
@@ -40,8 +40,6 @@ config SUPERH | |||
40 | select GENERIC_STRNLEN_USER | 40 | select GENERIC_STRNLEN_USER |
41 | select HAVE_MOD_ARCH_SPECIFIC if DWARF_UNWINDER | 41 | select HAVE_MOD_ARCH_SPECIFIC if DWARF_UNWINDER |
42 | select MODULES_USE_ELF_RELA | 42 | select MODULES_USE_ELF_RELA |
43 | select GENERIC_KERNEL_THREAD | ||
44 | select GENERIC_KERNEL_EXECVE | ||
45 | help | 43 | help |
46 | The SuperH is a RISC processor targeted for use in embedded systems | 44 | The SuperH is a RISC processor targeted for use in embedded systems |
47 | and consumer electronics; it was also used in the Sega Dreamcast | 45 | and consumer electronics; it was also used in the Sega Dreamcast |
diff --git a/arch/sh/include/asm/unistd.h b/arch/sh/include/asm/unistd.h index 43d3f26b2eab..012004ed3330 100644 --- a/arch/sh/include/asm/unistd.h +++ b/arch/sh/include/asm/unistd.h | |||
@@ -28,7 +28,6 @@ | |||
28 | # define __ARCH_WANT_SYS_SIGPENDING | 28 | # define __ARCH_WANT_SYS_SIGPENDING |
29 | # define __ARCH_WANT_SYS_SIGPROCMASK | 29 | # define __ARCH_WANT_SYS_SIGPROCMASK |
30 | # define __ARCH_WANT_SYS_RT_SIGACTION | 30 | # define __ARCH_WANT_SYS_RT_SIGACTION |
31 | # define __ARCH_WANT_SYS_EXECVE | ||
32 | # define __ARCH_WANT_SYS_FORK | 31 | # define __ARCH_WANT_SYS_FORK |
33 | # define __ARCH_WANT_SYS_VFORK | 32 | # define __ARCH_WANT_SYS_VFORK |
34 | # define __ARCH_WANT_SYS_CLONE | 33 | # define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 0c7d365fa402..9f2edb5c5551 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig | |||
@@ -41,8 +41,6 @@ config SPARC | |||
41 | select GENERIC_STRNCPY_FROM_USER | 41 | select GENERIC_STRNCPY_FROM_USER |
42 | select GENERIC_STRNLEN_USER | 42 | select GENERIC_STRNLEN_USER |
43 | select MODULES_USE_ELF_RELA | 43 | select MODULES_USE_ELF_RELA |
44 | select GENERIC_KERNEL_THREAD | ||
45 | select GENERIC_KERNEL_EXECVE | ||
46 | 44 | ||
47 | config SPARC32 | 45 | config SPARC32 |
48 | def_bool !64BIT | 46 | def_bool !64BIT |
diff --git a/arch/sparc/include/asm/unistd.h b/arch/sparc/include/asm/unistd.h index 497386a7ed28..87ce24c5eb95 100644 --- a/arch/sparc/include/asm/unistd.h +++ b/arch/sparc/include/asm/unistd.h | |||
@@ -47,7 +47,6 @@ | |||
47 | #define __ARCH_WANT_COMPAT_SYS_SENDFILE | 47 | #define __ARCH_WANT_COMPAT_SYS_SENDFILE |
48 | #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL | 48 | #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL |
49 | #endif | 49 | #endif |
50 | #define __ARCH_WANT_SYS_EXECVE | ||
51 | 50 | ||
52 | /* | 51 | /* |
53 | * "Conditional" syscalls | 52 | * "Conditional" syscalls |
diff --git a/arch/sparc/include/uapi/asm/signal.h b/arch/sparc/include/uapi/asm/signal.h index 1a041892538f..c4ffd6c97106 100644 --- a/arch/sparc/include/uapi/asm/signal.h +++ b/arch/sparc/include/uapi/asm/signal.h | |||
@@ -147,12 +147,6 @@ struct sigstack { | |||
147 | #define SIG_UNBLOCK 0x02 /* for unblocking signals */ | 147 | #define SIG_UNBLOCK 0x02 /* for unblocking signals */ |
148 | #define SIG_SETMASK 0x04 /* for setting the signal mask */ | 148 | #define SIG_SETMASK 0x04 /* for setting the signal mask */ |
149 | 149 | ||
150 | /* | ||
151 | * sigaltstack controls | ||
152 | */ | ||
153 | #define SS_ONSTACK 1 | ||
154 | #define SS_DISABLE 2 | ||
155 | |||
156 | #define MINSIGSTKSZ 4096 | 150 | #define MINSIGSTKSZ 4096 |
157 | #define SIGSTKSZ 16384 | 151 | #define SIGSTKSZ 16384 |
158 | 152 | ||
diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig index ea7f61e8bc9e..875d008828b8 100644 --- a/arch/tile/Kconfig +++ b/arch/tile/Kconfig | |||
@@ -21,8 +21,6 @@ config TILE | |||
21 | select ARCH_HAVE_NMI_SAFE_CMPXCHG | 21 | select ARCH_HAVE_NMI_SAFE_CMPXCHG |
22 | select GENERIC_CLOCKEVENTS | 22 | select GENERIC_CLOCKEVENTS |
23 | select MODULES_USE_ELF_RELA | 23 | select MODULES_USE_ELF_RELA |
24 | select GENERIC_KERNEL_THREAD | ||
25 | select GENERIC_KERNEL_EXECVE | ||
26 | 24 | ||
27 | # FIXME: investigate whether we need/want these options. | 25 | # FIXME: investigate whether we need/want these options. |
28 | # select HAVE_IOREMAP_PROT | 26 | # select HAVE_IOREMAP_PROT |
diff --git a/arch/tile/include/asm/ptrace.h b/arch/tile/include/asm/ptrace.h index 5ce052e16b7b..2e83fc1b9467 100644 --- a/arch/tile/include/asm/ptrace.h +++ b/arch/tile/include/asm/ptrace.h | |||
@@ -35,6 +35,7 @@ typedef unsigned long pt_reg_t; | |||
35 | 35 | ||
36 | #define instruction_pointer(regs) ((regs)->pc) | 36 | #define instruction_pointer(regs) ((regs)->pc) |
37 | #define profile_pc(regs) instruction_pointer(regs) | 37 | #define profile_pc(regs) instruction_pointer(regs) |
38 | #define user_stack_pointer(regs) ((regs)->sp) | ||
38 | 39 | ||
39 | /* Does the process account for user or for system time? */ | 40 | /* Does the process account for user or for system time? */ |
40 | #define user_mode(regs) (EX1_PL((regs)->ex1) == USER_PL) | 41 | #define user_mode(regs) (EX1_PL((regs)->ex1) == USER_PL) |
diff --git a/arch/tile/include/asm/unistd.h b/arch/tile/include/asm/unistd.h index fe841e7d4963..6ac21034f69a 100644 --- a/arch/tile/include/asm/unistd.h +++ b/arch/tile/include/asm/unistd.h | |||
@@ -17,6 +17,5 @@ | |||
17 | #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL | 17 | #define __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL |
18 | #endif | 18 | #endif |
19 | #define __ARCH_WANT_SYS_NEWFSTATAT | 19 | #define __ARCH_WANT_SYS_NEWFSTATAT |
20 | #define __ARCH_WANT_SYS_EXECVE | ||
21 | #define __ARCH_WANT_SYS_CLONE | 20 | #define __ARCH_WANT_SYS_CLONE |
22 | #include <uapi/asm/unistd.h> | 21 | #include <uapi/asm/unistd.h> |
diff --git a/arch/um/kernel/signal.c b/arch/um/kernel/signal.c index db18eb6124e1..48ccf718e290 100644 --- a/arch/um/kernel/signal.c +++ b/arch/um/kernel/signal.c | |||
@@ -132,8 +132,3 @@ long sys_sigsuspend(int history0, int history1, old_sigset_t mask) | |||
132 | siginitset(&blocked, mask); | 132 | siginitset(&blocked, mask); |
133 | return sigsuspend(&blocked); | 133 | return sigsuspend(&blocked); |
134 | } | 134 | } |
135 | |||
136 | long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss) | ||
137 | { | ||
138 | return do_sigaltstack(uss, uoss, PT_REGS_SP(¤t->thread.regs)); | ||
139 | } | ||
diff --git a/arch/unicore32/Kconfig b/arch/unicore32/Kconfig index c4fbb21e802b..60651df5f952 100644 --- a/arch/unicore32/Kconfig +++ b/arch/unicore32/Kconfig | |||
@@ -16,8 +16,6 @@ config UNICORE32 | |||
16 | select ARCH_WANT_FRAME_POINTERS | 16 | select ARCH_WANT_FRAME_POINTERS |
17 | select GENERIC_IOMAP | 17 | select GENERIC_IOMAP |
18 | select MODULES_USE_ELF_REL | 18 | select MODULES_USE_ELF_REL |
19 | select GENERIC_KERNEL_THREAD | ||
20 | select GENERIC_KERNEL_EXECVE | ||
21 | help | 19 | help |
22 | UniCore-32 is 32-bit Instruction Set Architecture, | 20 | UniCore-32 is 32-bit Instruction Set Architecture, |
23 | including a series of low-power-consumption RISC chip | 21 | including a series of low-power-consumption RISC chip |
diff --git a/arch/unicore32/include/asm/ptrace.h b/arch/unicore32/include/asm/ptrace.h index 726749dab52f..9df53d991c78 100644 --- a/arch/unicore32/include/asm/ptrace.h +++ b/arch/unicore32/include/asm/ptrace.h | |||
@@ -54,6 +54,7 @@ static inline int valid_user_regs(struct pt_regs *regs) | |||
54 | } | 54 | } |
55 | 55 | ||
56 | #define instruction_pointer(regs) ((regs)->UCreg_pc) | 56 | #define instruction_pointer(regs) ((regs)->UCreg_pc) |
57 | #define user_stack_pointer(regs) ((regs)->UCreg_sp) | ||
57 | 58 | ||
58 | #endif /* __ASSEMBLY__ */ | 59 | #endif /* __ASSEMBLY__ */ |
59 | #endif | 60 | #endif |
diff --git a/arch/unicore32/include/uapi/asm/unistd.h b/arch/unicore32/include/uapi/asm/unistd.h index 00cf5e286fca..d4cc4559d848 100644 --- a/arch/unicore32/include/uapi/asm/unistd.h +++ b/arch/unicore32/include/uapi/asm/unistd.h | |||
@@ -12,5 +12,4 @@ | |||
12 | 12 | ||
13 | /* Use the standard ABI for syscalls. */ | 13 | /* Use the standard ABI for syscalls. */ |
14 | #include <asm-generic/unistd.h> | 14 | #include <asm-generic/unistd.h> |
15 | #define __ARCH_WANT_SYS_EXECVE | ||
16 | #define __ARCH_WANT_SYS_CLONE | 15 | #define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 97f8c5ad8c2d..79795af59810 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
@@ -110,11 +110,10 @@ config X86 | |||
110 | select GENERIC_STRNLEN_USER | 110 | select GENERIC_STRNLEN_USER |
111 | select HAVE_CONTEXT_TRACKING if X86_64 | 111 | select HAVE_CONTEXT_TRACKING if X86_64 |
112 | select HAVE_IRQ_TIME_ACCOUNTING | 112 | select HAVE_IRQ_TIME_ACCOUNTING |
113 | select GENERIC_KERNEL_THREAD | ||
114 | select GENERIC_KERNEL_EXECVE | ||
115 | select MODULES_USE_ELF_REL if X86_32 | 113 | select MODULES_USE_ELF_REL if X86_32 |
116 | select MODULES_USE_ELF_RELA if X86_64 | 114 | select MODULES_USE_ELF_RELA if X86_64 |
117 | select CLONE_BACKWARDS if X86_32 | 115 | select CLONE_BACKWARDS if X86_32 |
116 | select GENERIC_SIGALTSTACK | ||
118 | 117 | ||
119 | config INSTRUCTION_DECODER | 118 | config INSTRUCTION_DECODER |
120 | def_bool y | 119 | def_bool y |
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c index efc6a958b71d..a1daf4a65009 100644 --- a/arch/x86/ia32/ia32_signal.c +++ b/arch/x86/ia32/ia32_signal.c | |||
@@ -136,52 +136,6 @@ asmlinkage long sys32_sigsuspend(int history0, int history1, old_sigset_t mask) | |||
136 | return sigsuspend(&blocked); | 136 | return sigsuspend(&blocked); |
137 | } | 137 | } |
138 | 138 | ||
139 | asmlinkage long sys32_sigaltstack(const stack_ia32_t __user *uss_ptr, | ||
140 | stack_ia32_t __user *uoss_ptr, | ||
141 | struct pt_regs *regs) | ||
142 | { | ||
143 | stack_t uss, uoss; | ||
144 | int ret, err = 0; | ||
145 | mm_segment_t seg; | ||
146 | |||
147 | if (uss_ptr) { | ||
148 | u32 ptr; | ||
149 | |||
150 | memset(&uss, 0, sizeof(stack_t)); | ||
151 | if (!access_ok(VERIFY_READ, uss_ptr, sizeof(stack_ia32_t))) | ||
152 | return -EFAULT; | ||
153 | |||
154 | get_user_try { | ||
155 | get_user_ex(ptr, &uss_ptr->ss_sp); | ||
156 | get_user_ex(uss.ss_flags, &uss_ptr->ss_flags); | ||
157 | get_user_ex(uss.ss_size, &uss_ptr->ss_size); | ||
158 | } get_user_catch(err); | ||
159 | |||
160 | if (err) | ||
161 | return -EFAULT; | ||
162 | uss.ss_sp = compat_ptr(ptr); | ||
163 | } | ||
164 | seg = get_fs(); | ||
165 | set_fs(KERNEL_DS); | ||
166 | ret = do_sigaltstack((stack_t __force __user *) (uss_ptr ? &uss : NULL), | ||
167 | (stack_t __force __user *) &uoss, regs->sp); | ||
168 | set_fs(seg); | ||
169 | if (ret >= 0 && uoss_ptr) { | ||
170 | if (!access_ok(VERIFY_WRITE, uoss_ptr, sizeof(stack_ia32_t))) | ||
171 | return -EFAULT; | ||
172 | |||
173 | put_user_try { | ||
174 | put_user_ex(ptr_to_compat(uoss.ss_sp), &uoss_ptr->ss_sp); | ||
175 | put_user_ex(uoss.ss_flags, &uoss_ptr->ss_flags); | ||
176 | put_user_ex(uoss.ss_size, &uoss_ptr->ss_size); | ||
177 | } put_user_catch(err); | ||
178 | |||
179 | if (err) | ||
180 | ret = -EFAULT; | ||
181 | } | ||
182 | return ret; | ||
183 | } | ||
184 | |||
185 | /* | 139 | /* |
186 | * Do a signal return; undo the signal stack. | 140 | * Do a signal return; undo the signal stack. |
187 | */ | 141 | */ |
@@ -292,7 +246,6 @@ asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs) | |||
292 | struct rt_sigframe_ia32 __user *frame; | 246 | struct rt_sigframe_ia32 __user *frame; |
293 | sigset_t set; | 247 | sigset_t set; |
294 | unsigned int ax; | 248 | unsigned int ax; |
295 | struct pt_regs tregs; | ||
296 | 249 | ||
297 | frame = (struct rt_sigframe_ia32 __user *)(regs->sp - 4); | 250 | frame = (struct rt_sigframe_ia32 __user *)(regs->sp - 4); |
298 | 251 | ||
@@ -306,8 +259,7 @@ asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs) | |||
306 | if (ia32_restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax)) | 259 | if (ia32_restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax)) |
307 | goto badframe; | 260 | goto badframe; |
308 | 261 | ||
309 | tregs = *regs; | 262 | if (compat_restore_altstack(&frame->uc.uc_stack)) |
310 | if (sys32_sigaltstack(&frame->uc.uc_stack, NULL, &tregs) == -EFAULT) | ||
311 | goto badframe; | 263 | goto badframe; |
312 | 264 | ||
313 | return ax; | 265 | return ax; |
@@ -515,10 +467,7 @@ int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
515 | else | 467 | else |
516 | put_user_ex(0, &frame->uc.uc_flags); | 468 | put_user_ex(0, &frame->uc.uc_flags); |
517 | put_user_ex(0, &frame->uc.uc_link); | 469 | put_user_ex(0, &frame->uc.uc_link); |
518 | put_user_ex(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); | 470 | err |= __compat_save_altstack(&frame->uc.uc_stack, regs->sp); |
519 | put_user_ex(sas_ss_flags(regs->sp), | ||
520 | &frame->uc.uc_stack.ss_flags); | ||
521 | put_user_ex(current->sas_ss_size, &frame->uc.uc_stack.ss_size); | ||
522 | 471 | ||
523 | if (ka->sa.sa_flags & SA_RESTORER) | 472 | if (ka->sa.sa_flags & SA_RESTORER) |
524 | restorer = ka->sa.sa_restorer; | 473 | restorer = ka->sa.sa_restorer; |
diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S index 32e6f05ddaaa..102ff7cb3e41 100644 --- a/arch/x86/ia32/ia32entry.S +++ b/arch/x86/ia32/ia32entry.S | |||
@@ -464,7 +464,6 @@ GLOBAL(\label) | |||
464 | 464 | ||
465 | PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi | 465 | PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi |
466 | PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi | 466 | PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi |
467 | PTREGSCALL stub32_sigaltstack, sys32_sigaltstack, %rdx | ||
468 | PTREGSCALL stub32_execve, compat_sys_execve, %rcx | 467 | PTREGSCALL stub32_execve, compat_sys_execve, %rcx |
469 | PTREGSCALL stub32_fork, sys_fork, %rdi | 468 | PTREGSCALL stub32_fork, sys_fork, %rdi |
470 | PTREGSCALL stub32_vfork, sys_vfork, %rdi | 469 | PTREGSCALL stub32_vfork, sys_vfork, %rdi |
diff --git a/arch/x86/include/asm/ia32.h b/arch/x86/include/asm/ia32.h index e6232773ce49..4c6da2e4bb1d 100644 --- a/arch/x86/include/asm/ia32.h +++ b/arch/x86/include/asm/ia32.h | |||
@@ -29,16 +29,10 @@ struct old_sigaction32 { | |||
29 | unsigned int sa_restorer; /* Another 32 bit pointer */ | 29 | unsigned int sa_restorer; /* Another 32 bit pointer */ |
30 | }; | 30 | }; |
31 | 31 | ||
32 | typedef struct sigaltstack_ia32 { | ||
33 | unsigned int ss_sp; | ||
34 | int ss_flags; | ||
35 | unsigned int ss_size; | ||
36 | } stack_ia32_t; | ||
37 | |||
38 | struct ucontext_ia32 { | 32 | struct ucontext_ia32 { |
39 | unsigned int uc_flags; | 33 | unsigned int uc_flags; |
40 | unsigned int uc_link; | 34 | unsigned int uc_link; |
41 | stack_ia32_t uc_stack; | 35 | compat_stack_t uc_stack; |
42 | struct sigcontext_ia32 uc_mcontext; | 36 | struct sigcontext_ia32 uc_mcontext; |
43 | compat_sigset_t uc_sigmask; /* mask last for extensibility */ | 37 | compat_sigset_t uc_sigmask; /* mask last for extensibility */ |
44 | }; | 38 | }; |
@@ -46,7 +40,7 @@ struct ucontext_ia32 { | |||
46 | struct ucontext_x32 { | 40 | struct ucontext_x32 { |
47 | unsigned int uc_flags; | 41 | unsigned int uc_flags; |
48 | unsigned int uc_link; | 42 | unsigned int uc_link; |
49 | stack_ia32_t uc_stack; | 43 | compat_stack_t uc_stack; |
50 | unsigned int uc__pad0; /* needed for alignment */ | 44 | unsigned int uc__pad0; /* needed for alignment */ |
51 | struct sigcontext uc_mcontext; /* the 64-bit sigcontext type */ | 45 | struct sigcontext uc_mcontext; /* the 64-bit sigcontext type */ |
52 | compat_sigset_t uc_sigmask; /* mask last for extensibility */ | 46 | compat_sigset_t uc_sigmask; /* mask last for extensibility */ |
diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h index 03ca442d8f0d..942a08623a1a 100644 --- a/arch/x86/include/asm/ptrace.h +++ b/arch/x86/include/asm/ptrace.h | |||
@@ -133,6 +133,13 @@ static inline bool user_64bit_mode(struct pt_regs *regs) | |||
133 | return regs->cs == __USER_CS || regs->cs == pv_info.extra_user_64bit_cs; | 133 | return regs->cs == __USER_CS || regs->cs == pv_info.extra_user_64bit_cs; |
134 | #endif | 134 | #endif |
135 | } | 135 | } |
136 | |||
137 | #define current_user_stack_pointer() this_cpu_read(old_rsp) | ||
138 | /* ia32 vs. x32 difference */ | ||
139 | #define compat_user_stack_pointer() \ | ||
140 | (test_thread_flag(TIF_IA32) \ | ||
141 | ? current_pt_regs()->sp \ | ||
142 | : this_cpu_read(old_rsp)) | ||
136 | #endif | 143 | #endif |
137 | 144 | ||
138 | #ifdef CONFIG_X86_32 | 145 | #ifdef CONFIG_X86_32 |
diff --git a/arch/x86/include/asm/sys_ia32.h b/arch/x86/include/asm/sys_ia32.h index c76fae4d90be..31f61f96e0fb 100644 --- a/arch/x86/include/asm/sys_ia32.h +++ b/arch/x86/include/asm/sys_ia32.h | |||
@@ -69,8 +69,6 @@ asmlinkage long sys32_fallocate(int, int, unsigned, | |||
69 | 69 | ||
70 | /* ia32/ia32_signal.c */ | 70 | /* ia32/ia32_signal.c */ |
71 | asmlinkage long sys32_sigsuspend(int, int, old_sigset_t); | 71 | asmlinkage long sys32_sigsuspend(int, int, old_sigset_t); |
72 | asmlinkage long sys32_sigaltstack(const stack_ia32_t __user *, | ||
73 | stack_ia32_t __user *, struct pt_regs *); | ||
74 | asmlinkage long sys32_sigreturn(struct pt_regs *); | 72 | asmlinkage long sys32_sigreturn(struct pt_regs *); |
75 | asmlinkage long sys32_rt_sigreturn(struct pt_regs *); | 73 | asmlinkage long sys32_rt_sigreturn(struct pt_regs *); |
76 | 74 | ||
diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h index 2f8374718aa3..58b7e3eac0ae 100644 --- a/arch/x86/include/asm/syscalls.h +++ b/arch/x86/include/asm/syscalls.h | |||
@@ -25,9 +25,6 @@ asmlinkage int sys_modify_ldt(int, void __user *, unsigned long); | |||
25 | 25 | ||
26 | /* kernel/signal.c */ | 26 | /* kernel/signal.c */ |
27 | long sys_rt_sigreturn(struct pt_regs *); | 27 | long sys_rt_sigreturn(struct pt_regs *); |
28 | long sys_sigaltstack(const stack_t __user *, stack_t __user *, | ||
29 | struct pt_regs *); | ||
30 | |||
31 | 28 | ||
32 | /* kernel/tls.c */ | 29 | /* kernel/tls.c */ |
33 | asmlinkage int sys_set_thread_area(struct user_desc __user *); | 30 | asmlinkage int sys_set_thread_area(struct user_desc __user *); |
diff --git a/arch/x86/include/asm/unistd.h b/arch/x86/include/asm/unistd.h index 1003e69a40d9..a0790e07ba65 100644 --- a/arch/x86/include/asm/unistd.h +++ b/arch/x86/include/asm/unistd.h | |||
@@ -48,7 +48,6 @@ | |||
48 | # define __ARCH_WANT_SYS_TIME | 48 | # define __ARCH_WANT_SYS_TIME |
49 | # define __ARCH_WANT_SYS_UTIME | 49 | # define __ARCH_WANT_SYS_UTIME |
50 | # define __ARCH_WANT_SYS_WAITPID | 50 | # define __ARCH_WANT_SYS_WAITPID |
51 | # define __ARCH_WANT_SYS_EXECVE | ||
52 | # define __ARCH_WANT_SYS_FORK | 51 | # define __ARCH_WANT_SYS_FORK |
53 | # define __ARCH_WANT_SYS_VFORK | 52 | # define __ARCH_WANT_SYS_VFORK |
54 | # define __ARCH_WANT_SYS_CLONE | 53 | # define __ARCH_WANT_SYS_CLONE |
diff --git a/arch/x86/include/uapi/asm/signal.h b/arch/x86/include/uapi/asm/signal.h index 0818f9a8e889..aa7d6ae39e0e 100644 --- a/arch/x86/include/uapi/asm/signal.h +++ b/arch/x86/include/uapi/asm/signal.h | |||
@@ -87,12 +87,6 @@ typedef unsigned long sigset_t; | |||
87 | 87 | ||
88 | #define SA_RESTORER 0x04000000 | 88 | #define SA_RESTORER 0x04000000 |
89 | 89 | ||
90 | /* | ||
91 | * sigaltstack controls | ||
92 | */ | ||
93 | #define SS_ONSTACK 1 | ||
94 | #define SS_DISABLE 2 | ||
95 | |||
96 | #define MINSIGSTKSZ 2048 | 90 | #define MINSIGSTKSZ 2048 |
97 | #define SIGSTKSZ 8192 | 91 | #define SIGSTKSZ 8192 |
98 | 92 | ||
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index c763116c5359..ff84d5469d77 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
@@ -739,7 +739,6 @@ ENTRY(ptregs_##name) ; \ | |||
739 | ENDPROC(ptregs_##name) | 739 | ENDPROC(ptregs_##name) |
740 | 740 | ||
741 | PTREGSCALL1(iopl) | 741 | PTREGSCALL1(iopl) |
742 | PTREGSCALL2(sigaltstack) | ||
743 | PTREGSCALL0(sigreturn) | 742 | PTREGSCALL0(sigreturn) |
744 | PTREGSCALL0(rt_sigreturn) | 743 | PTREGSCALL0(rt_sigreturn) |
745 | PTREGSCALL2(vm86) | 744 | PTREGSCALL2(vm86) |
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 70641aff0c25..07a7a04529bc 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
@@ -864,7 +864,6 @@ END(stub_\func) | |||
864 | FORK_LIKE clone | 864 | FORK_LIKE clone |
865 | FORK_LIKE fork | 865 | FORK_LIKE fork |
866 | FORK_LIKE vfork | 866 | FORK_LIKE vfork |
867 | PTREGSCALL stub_sigaltstack, sys_sigaltstack, %rdx | ||
868 | PTREGSCALL stub_iopl, sys_iopl, %rsi | 867 | PTREGSCALL stub_iopl, sys_iopl, %rsi |
869 | 868 | ||
870 | ENTRY(ptregscall_common) | 869 | ENTRY(ptregscall_common) |
@@ -913,8 +912,6 @@ ENTRY(stub_rt_sigreturn) | |||
913 | END(stub_rt_sigreturn) | 912 | END(stub_rt_sigreturn) |
914 | 913 | ||
915 | #ifdef CONFIG_X86_X32_ABI | 914 | #ifdef CONFIG_X86_X32_ABI |
916 | PTREGSCALL stub_x32_sigaltstack, sys32_sigaltstack, %rdx | ||
917 | |||
918 | ENTRY(stub_x32_rt_sigreturn) | 915 | ENTRY(stub_x32_rt_sigreturn) |
919 | CFI_STARTPROC | 916 | CFI_STARTPROC |
920 | addq $8, %rsp | 917 | addq $8, %rsp |
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index fbbb604313a2..d6bf1f34a6e9 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c | |||
@@ -364,10 +364,7 @@ static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
364 | else | 364 | else |
365 | put_user_ex(0, &frame->uc.uc_flags); | 365 | put_user_ex(0, &frame->uc.uc_flags); |
366 | put_user_ex(0, &frame->uc.uc_link); | 366 | put_user_ex(0, &frame->uc.uc_link); |
367 | put_user_ex(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); | 367 | err |= __save_altstack(&frame->uc.uc_stack, regs->sp); |
368 | put_user_ex(sas_ss_flags(regs->sp), | ||
369 | &frame->uc.uc_stack.ss_flags); | ||
370 | put_user_ex(current->sas_ss_size, &frame->uc.uc_stack.ss_size); | ||
371 | 368 | ||
372 | /* Set up to return from userspace. */ | 369 | /* Set up to return from userspace. */ |
373 | restorer = VDSO32_SYMBOL(current->mm->context.vdso, rt_sigreturn); | 370 | restorer = VDSO32_SYMBOL(current->mm->context.vdso, rt_sigreturn); |
@@ -414,7 +411,6 @@ static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
414 | struct rt_sigframe __user *frame; | 411 | struct rt_sigframe __user *frame; |
415 | void __user *fp = NULL; | 412 | void __user *fp = NULL; |
416 | int err = 0; | 413 | int err = 0; |
417 | struct task_struct *me = current; | ||
418 | 414 | ||
419 | frame = get_sigframe(ka, regs, sizeof(struct rt_sigframe), &fp); | 415 | frame = get_sigframe(ka, regs, sizeof(struct rt_sigframe), &fp); |
420 | 416 | ||
@@ -433,10 +429,7 @@ static int __setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
433 | else | 429 | else |
434 | put_user_ex(0, &frame->uc.uc_flags); | 430 | put_user_ex(0, &frame->uc.uc_flags); |
435 | put_user_ex(0, &frame->uc.uc_link); | 431 | put_user_ex(0, &frame->uc.uc_link); |
436 | put_user_ex(me->sas_ss_sp, &frame->uc.uc_stack.ss_sp); | 432 | err |= __save_altstack(&frame->uc.uc_stack, regs->sp); |
437 | put_user_ex(sas_ss_flags(regs->sp), | ||
438 | &frame->uc.uc_stack.ss_flags); | ||
439 | put_user_ex(me->sas_ss_size, &frame->uc.uc_stack.ss_size); | ||
440 | 433 | ||
441 | /* Set up to return from userspace. If provided, use a stub | 434 | /* Set up to return from userspace. If provided, use a stub |
442 | already in userspace. */ | 435 | already in userspace. */ |
@@ -503,10 +496,7 @@ static int x32_setup_rt_frame(int sig, struct k_sigaction *ka, | |||
503 | else | 496 | else |
504 | put_user_ex(0, &frame->uc.uc_flags); | 497 | put_user_ex(0, &frame->uc.uc_flags); |
505 | put_user_ex(0, &frame->uc.uc_link); | 498 | put_user_ex(0, &frame->uc.uc_link); |
506 | put_user_ex(current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); | 499 | err |= __compat_save_altstack(&frame->uc.uc_stack, regs->sp); |
507 | put_user_ex(sas_ss_flags(regs->sp), | ||
508 | &frame->uc.uc_stack.ss_flags); | ||
509 | put_user_ex(current->sas_ss_size, &frame->uc.uc_stack.ss_size); | ||
510 | put_user_ex(0, &frame->uc.uc__pad0); | 500 | put_user_ex(0, &frame->uc.uc__pad0); |
511 | 501 | ||
512 | if (ka->sa.sa_flags & SA_RESTORER) { | 502 | if (ka->sa.sa_flags & SA_RESTORER) { |
@@ -603,13 +593,6 @@ sys_sigaction(int sig, const struct old_sigaction __user *act, | |||
603 | } | 593 | } |
604 | #endif /* CONFIG_X86_32 */ | 594 | #endif /* CONFIG_X86_32 */ |
605 | 595 | ||
606 | long | ||
607 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, | ||
608 | struct pt_regs *regs) | ||
609 | { | ||
610 | return do_sigaltstack(uss, uoss, regs->sp); | ||
611 | } | ||
612 | |||
613 | /* | 596 | /* |
614 | * Do a signal return; undo the signal stack. | 597 | * Do a signal return; undo the signal stack. |
615 | */ | 598 | */ |
@@ -659,7 +642,7 @@ long sys_rt_sigreturn(struct pt_regs *regs) | |||
659 | if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax)) | 642 | if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax)) |
660 | goto badframe; | 643 | goto badframe; |
661 | 644 | ||
662 | if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->sp) == -EFAULT) | 645 | if (restore_altstack(&frame->uc.uc_stack)) |
663 | goto badframe; | 646 | goto badframe; |
664 | 647 | ||
665 | return ax; | 648 | return ax; |
@@ -865,7 +848,6 @@ asmlinkage long sys32_x32_rt_sigreturn(struct pt_regs *regs) | |||
865 | struct rt_sigframe_x32 __user *frame; | 848 | struct rt_sigframe_x32 __user *frame; |
866 | sigset_t set; | 849 | sigset_t set; |
867 | unsigned long ax; | 850 | unsigned long ax; |
868 | struct pt_regs tregs; | ||
869 | 851 | ||
870 | frame = (struct rt_sigframe_x32 __user *)(regs->sp - 8); | 852 | frame = (struct rt_sigframe_x32 __user *)(regs->sp - 8); |
871 | 853 | ||
@@ -879,8 +861,7 @@ asmlinkage long sys32_x32_rt_sigreturn(struct pt_regs *regs) | |||
879 | if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax)) | 861 | if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax)) |
880 | goto badframe; | 862 | goto badframe; |
881 | 863 | ||
882 | tregs = *regs; | 864 | if (compat_restore_altstack(&frame->uc.uc_stack)) |
883 | if (sys32_sigaltstack(&frame->uc.uc_stack, NULL, &tregs) == -EFAULT) | ||
884 | goto badframe; | 865 | goto badframe; |
885 | 866 | ||
886 | return ax; | 867 | return ax; |
diff --git a/arch/x86/syscalls/syscall_32.tbl b/arch/x86/syscalls/syscall_32.tbl index 05f404f53f59..28e3fa9056ea 100644 --- a/arch/x86/syscalls/syscall_32.tbl +++ b/arch/x86/syscalls/syscall_32.tbl | |||
@@ -192,7 +192,7 @@ | |||
192 | 183 i386 getcwd sys_getcwd | 192 | 183 i386 getcwd sys_getcwd |
193 | 184 i386 capget sys_capget | 193 | 184 i386 capget sys_capget |
194 | 185 i386 capset sys_capset | 194 | 185 i386 capset sys_capset |
195 | 186 i386 sigaltstack ptregs_sigaltstack stub32_sigaltstack | 195 | 186 i386 sigaltstack sys_sigaltstack compat_sys_sigaltstack |
196 | 187 i386 sendfile sys_sendfile sys32_sendfile | 196 | 187 i386 sendfile sys_sendfile sys32_sendfile |
197 | 188 i386 getpmsg | 197 | 188 i386 getpmsg |
198 | 189 i386 putpmsg | 198 | 189 i386 putpmsg |
diff --git a/arch/x86/syscalls/syscall_64.tbl b/arch/x86/syscalls/syscall_64.tbl index 7c58c84b7bc8..dc97328bd90a 100644 --- a/arch/x86/syscalls/syscall_64.tbl +++ b/arch/x86/syscalls/syscall_64.tbl | |||
@@ -137,7 +137,7 @@ | |||
137 | 128 64 rt_sigtimedwait sys_rt_sigtimedwait | 137 | 128 64 rt_sigtimedwait sys_rt_sigtimedwait |
138 | 129 64 rt_sigqueueinfo sys_rt_sigqueueinfo | 138 | 129 64 rt_sigqueueinfo sys_rt_sigqueueinfo |
139 | 130 common rt_sigsuspend sys_rt_sigsuspend | 139 | 130 common rt_sigsuspend sys_rt_sigsuspend |
140 | 131 64 sigaltstack stub_sigaltstack | 140 | 131 64 sigaltstack sys_sigaltstack |
141 | 132 common utime sys_utime | 141 | 132 common utime sys_utime |
142 | 133 common mknod sys_mknod | 142 | 133 common mknod sys_mknod |
143 | 134 64 uselib | 143 | 134 64 uselib |
@@ -338,7 +338,7 @@ | |||
338 | 522 x32 rt_sigpending sys32_rt_sigpending | 338 | 522 x32 rt_sigpending sys32_rt_sigpending |
339 | 523 x32 rt_sigtimedwait compat_sys_rt_sigtimedwait | 339 | 523 x32 rt_sigtimedwait compat_sys_rt_sigtimedwait |
340 | 524 x32 rt_sigqueueinfo sys32_rt_sigqueueinfo | 340 | 524 x32 rt_sigqueueinfo sys32_rt_sigqueueinfo |
341 | 525 x32 sigaltstack stub_x32_sigaltstack | 341 | 525 x32 sigaltstack compat_sys_sigaltstack |
342 | 526 x32 timer_create compat_sys_timer_create | 342 | 526 x32 timer_create compat_sys_timer_create |
343 | 527 x32 mq_notify compat_sys_mq_notify | 343 | 527 x32 mq_notify compat_sys_mq_notify |
344 | 528 x32 kexec_load compat_sys_kexec_load | 344 | 528 x32 kexec_load compat_sys_kexec_load |
diff --git a/arch/x86/um/Kconfig b/arch/x86/um/Kconfig index 983997041963..53c90fd412d1 100644 --- a/arch/x86/um/Kconfig +++ b/arch/x86/um/Kconfig | |||
@@ -13,8 +13,7 @@ endmenu | |||
13 | config UML_X86 | 13 | config UML_X86 |
14 | def_bool y | 14 | def_bool y |
15 | select GENERIC_FIND_FIRST_BIT | 15 | select GENERIC_FIND_FIRST_BIT |
16 | select GENERIC_KERNEL_THREAD | 16 | select GENERIC_SIGALTSTACK |
17 | select GENERIC_KERNEL_EXECVE | ||
18 | 17 | ||
19 | config 64BIT | 18 | config 64BIT |
20 | bool "64-bit kernel" if SUBARCH = "x86" | 19 | bool "64-bit kernel" if SUBARCH = "x86" |
diff --git a/arch/x86/um/asm/ptrace.h b/arch/x86/um/asm/ptrace.h index 755133258c45..54f8102ccde5 100644 --- a/arch/x86/um/asm/ptrace.h +++ b/arch/x86/um/asm/ptrace.h | |||
@@ -86,4 +86,5 @@ extern long arch_prctl(struct task_struct *task, int code, | |||
86 | unsigned long __user *addr); | 86 | unsigned long __user *addr); |
87 | 87 | ||
88 | #endif | 88 | #endif |
89 | #define user_stack_pointer(regs) PT_REGS_SP(regs) | ||
89 | #endif /* __UM_X86_PTRACE_H */ | 90 | #endif /* __UM_X86_PTRACE_H */ |
diff --git a/arch/x86/um/signal.c b/arch/x86/um/signal.c index bdaa08cfbcf4..71cef48ea5cd 100644 --- a/arch/x86/um/signal.c +++ b/arch/x86/um/signal.c | |||
@@ -342,9 +342,7 @@ static int copy_ucontext_to_user(struct ucontext __user *uc, | |||
342 | { | 342 | { |
343 | int err = 0; | 343 | int err = 0; |
344 | 344 | ||
345 | err |= put_user(current->sas_ss_sp, &uc->uc_stack.ss_sp); | 345 | err |= __save_altstack(&uc->uc_stack, sp); |
346 | err |= put_user(sas_ss_flags(sp), &uc->uc_stack.ss_flags); | ||
347 | err |= put_user(current->sas_ss_size, &uc->uc_stack.ss_size); | ||
348 | err |= copy_sc_to_user(&uc->uc_mcontext, fp, ¤t->thread.regs, 0); | 346 | err |= copy_sc_to_user(&uc->uc_mcontext, fp, ¤t->thread.regs, 0); |
349 | err |= copy_to_user(&uc->uc_sigmask, set, sizeof(*set)); | 347 | err |= copy_to_user(&uc->uc_sigmask, set, sizeof(*set)); |
350 | return err; | 348 | return err; |
@@ -529,10 +527,7 @@ int setup_signal_stack_si(unsigned long stack_top, int sig, | |||
529 | /* Create the ucontext. */ | 527 | /* Create the ucontext. */ |
530 | err |= __put_user(0, &frame->uc.uc_flags); | 528 | err |= __put_user(0, &frame->uc.uc_flags); |
531 | err |= __put_user(0, &frame->uc.uc_link); | 529 | err |= __put_user(0, &frame->uc.uc_link); |
532 | err |= __put_user(me->sas_ss_sp, &frame->uc.uc_stack.ss_sp); | 530 | err |= __save_altstack(&frame->uc.uc_stack, PT_REGS_SP(regs)); |
533 | err |= __put_user(sas_ss_flags(PT_REGS_SP(regs)), | ||
534 | &frame->uc.uc_stack.ss_flags); | ||
535 | err |= __put_user(me->sas_ss_size, &frame->uc.uc_stack.ss_size); | ||
536 | err |= copy_sc_to_user(&frame->uc.uc_mcontext, &frame->fpstate, regs, | 531 | err |= copy_sc_to_user(&frame->uc.uc_mcontext, &frame->fpstate, regs, |
537 | set->sig[0]); | 532 | set->sig[0]); |
538 | err |= __put_user(&frame->fpstate, &frame->uc.uc_mcontext.fpstate); | 533 | err |= __put_user(&frame->fpstate, &frame->uc.uc_mcontext.fpstate); |
diff --git a/arch/x86/um/sys_call_table_32.c b/arch/x86/um/sys_call_table_32.c index 812e98c098e4..a0c3b0d1a122 100644 --- a/arch/x86/um/sys_call_table_32.c +++ b/arch/x86/um/sys_call_table_32.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #define ptregs_iopl sys_iopl | 27 | #define ptregs_iopl sys_iopl |
28 | #define ptregs_vm86old sys_vm86old | 28 | #define ptregs_vm86old sys_vm86old |
29 | #define ptregs_vm86 sys_vm86 | 29 | #define ptregs_vm86 sys_vm86 |
30 | #define ptregs_sigaltstack sys_sigaltstack | ||
31 | 30 | ||
32 | #define __SYSCALL_I386(nr, sym, compat) extern asmlinkage void sym(void) ; | 31 | #define __SYSCALL_I386(nr, sym, compat) extern asmlinkage void sym(void) ; |
33 | #include <asm/syscalls_32.h> | 32 | #include <asm/syscalls_32.h> |
diff --git a/arch/x86/um/sys_call_table_64.c b/arch/x86/um/sys_call_table_64.c index 170bd926a69c..f2f0723070ca 100644 --- a/arch/x86/um/sys_call_table_64.c +++ b/arch/x86/um/sys_call_table_64.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #define stub_fork sys_fork | 31 | #define stub_fork sys_fork |
32 | #define stub_vfork sys_vfork | 32 | #define stub_vfork sys_vfork |
33 | #define stub_execve sys_execve | 33 | #define stub_execve sys_execve |
34 | #define stub_sigaltstack sys_sigaltstack | ||
35 | #define stub_rt_sigreturn sys_rt_sigreturn | 34 | #define stub_rt_sigreturn sys_rt_sigreturn |
36 | 35 | ||
37 | #define __SYSCALL_COMMON(nr, sym, compat) __SYSCALL_64(nr, sym, compat) | 36 | #define __SYSCALL_COMMON(nr, sym, compat) __SYSCALL_64(nr, sym, compat) |
diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig index 73d34e77c39c..5aab1acabf1c 100644 --- a/arch/xtensa/Kconfig +++ b/arch/xtensa/Kconfig | |||
@@ -13,8 +13,6 @@ config XTENSA | |||
13 | select GENERIC_CPU_DEVICES | 13 | select GENERIC_CPU_DEVICES |
14 | select MODULES_USE_ELF_RELA | 14 | select MODULES_USE_ELF_RELA |
15 | select GENERIC_PCI_IOMAP | 15 | select GENERIC_PCI_IOMAP |
16 | select GENERIC_KERNEL_THREAD | ||
17 | select GENERIC_KERNEL_EXECVE | ||
18 | select ARCH_WANT_OPTIONAL_GPIOLIB | 16 | select ARCH_WANT_OPTIONAL_GPIOLIB |
19 | select CLONE_BACKWARDS | 17 | select CLONE_BACKWARDS |
20 | select IRQ_DOMAIN | 18 | select IRQ_DOMAIN |
diff --git a/arch/xtensa/include/asm/ptrace.h b/arch/xtensa/include/asm/ptrace.h index 58bf6fd3f913..682b1deac1f2 100644 --- a/arch/xtensa/include/asm/ptrace.h +++ b/arch/xtensa/include/asm/ptrace.h | |||
@@ -63,6 +63,8 @@ struct pt_regs { | |||
63 | # define profile_pc(regs) instruction_pointer(regs) | 63 | # define profile_pc(regs) instruction_pointer(regs) |
64 | # endif | 64 | # endif |
65 | 65 | ||
66 | #define user_stack_pointer(regs) ((regs)->areg[1]) | ||
67 | |||
66 | #else /* __ASSEMBLY__ */ | 68 | #else /* __ASSEMBLY__ */ |
67 | 69 | ||
68 | # include <asm/asm-offsets.h> | 70 | # include <asm/asm-offsets.h> |
diff --git a/arch/xtensa/include/asm/unistd.h b/arch/xtensa/include/asm/unistd.h index e002dbcc88b6..eb63ea87815c 100644 --- a/arch/xtensa/include/asm/unistd.h +++ b/arch/xtensa/include/asm/unistd.h | |||
@@ -1,7 +1,6 @@ | |||
1 | #ifndef _XTENSA_UNISTD_H | 1 | #ifndef _XTENSA_UNISTD_H |
2 | #define _XTENSA_UNISTD_H | 2 | #define _XTENSA_UNISTD_H |
3 | 3 | ||
4 | #define __ARCH_WANT_SYS_EXECVE | ||
5 | #define __ARCH_WANT_SYS_CLONE | 4 | #define __ARCH_WANT_SYS_CLONE |
6 | #include <uapi/asm/unistd.h> | 5 | #include <uapi/asm/unistd.h> |
7 | 6 | ||
diff --git a/arch/xtensa/include/uapi/asm/signal.h b/arch/xtensa/include/uapi/asm/signal.h index b88ce96f2af9..dacf716dd3e0 100644 --- a/arch/xtensa/include/uapi/asm/signal.h +++ b/arch/xtensa/include/uapi/asm/signal.h | |||
@@ -97,12 +97,6 @@ typedef struct { | |||
97 | 97 | ||
98 | #define SA_RESTORER 0x04000000 | 98 | #define SA_RESTORER 0x04000000 |
99 | 99 | ||
100 | /* | ||
101 | * sigaltstack controls | ||
102 | */ | ||
103 | #define SS_ONSTACK 1 | ||
104 | #define SS_DISABLE 2 | ||
105 | |||
106 | #define MINSIGSTKSZ 2048 | 100 | #define MINSIGSTKSZ 2048 |
107 | #define SIGSTKSZ 8192 | 101 | #define SIGSTKSZ 8192 |
108 | 102 | ||
@@ -1654,7 +1654,6 @@ int get_dumpable(struct mm_struct *mm) | |||
1654 | return __get_dumpable(mm->flags); | 1654 | return __get_dumpable(mm->flags); |
1655 | } | 1655 | } |
1656 | 1656 | ||
1657 | #ifdef __ARCH_WANT_SYS_EXECVE | ||
1658 | SYSCALL_DEFINE3(execve, | 1657 | SYSCALL_DEFINE3(execve, |
1659 | const char __user *, filename, | 1658 | const char __user *, filename, |
1660 | const char __user *const __user *, argv, | 1659 | const char __user *const __user *, argv, |
@@ -1682,23 +1681,3 @@ asmlinkage long compat_sys_execve(const char __user * filename, | |||
1682 | return error; | 1681 | return error; |
1683 | } | 1682 | } |
1684 | #endif | 1683 | #endif |
1685 | #endif | ||
1686 | |||
1687 | #ifdef __ARCH_WANT_KERNEL_EXECVE | ||
1688 | int kernel_execve(const char *filename, | ||
1689 | const char *const argv[], | ||
1690 | const char *const envp[]) | ||
1691 | { | ||
1692 | int ret = do_execve(filename, | ||
1693 | (const char __user *const __user *)argv, | ||
1694 | (const char __user *const __user *)envp); | ||
1695 | if (ret < 0) | ||
1696 | return ret; | ||
1697 | |||
1698 | /* | ||
1699 | * We were successful. We won't be returning to our caller, but | ||
1700 | * instead to user space by manipulating the kernel stack. | ||
1701 | */ | ||
1702 | ret_from_kernel_execve(current_pt_regs()); | ||
1703 | } | ||
1704 | #endif | ||
diff --git a/include/linux/binfmts.h b/include/linux/binfmts.h index a4c2b565c835..cf3eae0b4f59 100644 --- a/include/linux/binfmts.h +++ b/include/linux/binfmts.h | |||
@@ -119,8 +119,4 @@ extern void install_exec_creds(struct linux_binprm *bprm); | |||
119 | extern void set_binfmt(struct linux_binfmt *new); | 119 | extern void set_binfmt(struct linux_binfmt *new); |
120 | extern void free_bprm(struct linux_binprm *); | 120 | extern void free_bprm(struct linux_binprm *); |
121 | 121 | ||
122 | #ifdef __ARCH_WANT_KERNEL_EXECVE | ||
123 | extern void ret_from_kernel_execve(struct pt_regs *normal) __noreturn; | ||
124 | #endif | ||
125 | |||
126 | #endif /* _LINUX_BINFMTS_H */ | 122 | #endif /* _LINUX_BINFMTS_H */ |
diff --git a/include/linux/compat.h b/include/linux/compat.h index e4920bd58a47..dec7e2d18875 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
@@ -23,6 +23,61 @@ | |||
23 | #define COMPAT_USE_64BIT_TIME 0 | 23 | #define COMPAT_USE_64BIT_TIME 0 |
24 | #endif | 24 | #endif |
25 | 25 | ||
26 | #ifndef __SC_DELOUSE | ||
27 | #define __SC_DELOUSE(t,v) ((t)(unsigned long)(v)) | ||
28 | #endif | ||
29 | |||
30 | #define __SC_CCAST1(t1, a1) __SC_DELOUSE(t1,a1) | ||
31 | #define __SC_CCAST2(t2, a2, ...) __SC_DELOUSE(t2,a2), __SC_CCAST1(__VA_ARGS__) | ||
32 | #define __SC_CCAST3(t3, a3, ...) __SC_DELOUSE(t3,a3), __SC_CCAST2(__VA_ARGS__) | ||
33 | #define __SC_CCAST4(t4, a4, ...) __SC_DELOUSE(t4,a4), __SC_CCAST3(__VA_ARGS__) | ||
34 | #define __SC_CCAST5(t5, a5, ...) __SC_DELOUSE(t5,a5), __SC_CCAST4(__VA_ARGS__) | ||
35 | #define __SC_CCAST6(t6, a6, ...) __SC_DELOUSE(t6,a6), __SC_CCAST5(__VA_ARGS__) | ||
36 | #define COMPAT_SYSCALL_DEFINE1(name, ...) \ | ||
37 | COMPAT_SYSCALL_DEFINEx(1, _##name, __VA_ARGS__) | ||
38 | #define COMPAT_SYSCALL_DEFINE2(name, ...) \ | ||
39 | COMPAT_SYSCALL_DEFINEx(2, _##name, __VA_ARGS__) | ||
40 | #define COMPAT_SYSCALL_DEFINE3(name, ...) \ | ||
41 | COMPAT_SYSCALL_DEFINEx(3, _##name, __VA_ARGS__) | ||
42 | #define COMPAT_SYSCALL_DEFINE4(name, ...) \ | ||
43 | COMPAT_SYSCALL_DEFINEx(4, _##name, __VA_ARGS__) | ||
44 | #define COMPAT_SYSCALL_DEFINE5(name, ...) \ | ||
45 | COMPAT_SYSCALL_DEFINEx(5, _##name, __VA_ARGS__) | ||
46 | #define COMPAT_SYSCALL_DEFINE6(name, ...) \ | ||
47 | COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) | ||
48 | |||
49 | #ifdef CONFIG_HAVE_SYSCALL_WRAPPERS | ||
50 | |||
51 | #define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ | ||
52 | asmlinkage long compat_sys##name(__SC_DECL##x(__VA_ARGS__)); \ | ||
53 | static inline long C_SYSC##name(__SC_DECL##x(__VA_ARGS__)); \ | ||
54 | asmlinkage long compat_SyS##name(__SC_LONG##x(__VA_ARGS__)) \ | ||
55 | { \ | ||
56 | return (long) C_SYSC##name(__SC_CCAST##x(__VA_ARGS__)); \ | ||
57 | } \ | ||
58 | SYSCALL_ALIAS(compat_sys##name, compat_SyS##name); \ | ||
59 | static inline long C_SYSC##name(__SC_DECL##x(__VA_ARGS__)) | ||
60 | |||
61 | #else /* CONFIG_HAVE_SYSCALL_WRAPPERS */ | ||
62 | |||
63 | #define COMPAT_SYSCALL_DEFINEx(x, name, ...) \ | ||
64 | asmlinkage long compat_sys##name(__SC_DECL##x(__VA_ARGS__)) | ||
65 | |||
66 | #endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */ | ||
67 | |||
68 | #ifndef compat_user_stack_pointer | ||
69 | #define compat_user_stack_pointer() current_user_stack_pointer() | ||
70 | #endif | ||
71 | #ifdef CONFIG_GENERIC_SIGALTSTACK | ||
72 | #ifndef compat_sigaltstack /* we'll need that for MIPS */ | ||
73 | typedef struct compat_sigaltstack { | ||
74 | compat_uptr_t ss_sp; | ||
75 | int ss_flags; | ||
76 | compat_size_t ss_size; | ||
77 | } compat_stack_t; | ||
78 | #endif | ||
79 | #endif | ||
80 | |||
26 | #define compat_jiffies_to_clock_t(x) \ | 81 | #define compat_jiffies_to_clock_t(x) \ |
27 | (((unsigned long)(x) * COMPAT_USER_HZ) / HZ) | 82 | (((unsigned long)(x) * COMPAT_USER_HZ) / HZ) |
28 | 83 | ||
@@ -587,6 +642,13 @@ asmlinkage ssize_t compat_sys_process_vm_writev(compat_pid_t pid, | |||
587 | 642 | ||
588 | asmlinkage long compat_sys_sendfile(int out_fd, int in_fd, | 643 | asmlinkage long compat_sys_sendfile(int out_fd, int in_fd, |
589 | compat_off_t __user *offset, compat_size_t count); | 644 | compat_off_t __user *offset, compat_size_t count); |
645 | #ifdef CONFIG_GENERIC_SIGALTSTACK | ||
646 | asmlinkage long compat_sys_sigaltstack(const compat_stack_t __user *uss_ptr, | ||
647 | compat_stack_t __user *uoss_ptr); | ||
648 | |||
649 | int compat_restore_altstack(const compat_stack_t __user *uss); | ||
650 | int __compat_save_altstack(compat_stack_t __user *, unsigned long); | ||
651 | #endif | ||
590 | 652 | ||
591 | asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid, | 653 | asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid, |
592 | struct compat_timespec __user *interval); | 654 | struct compat_timespec __user *interval); |
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h index addfbe7c180e..1693775ecfe8 100644 --- a/include/linux/ptrace.h +++ b/include/linux/ptrace.h | |||
@@ -344,6 +344,10 @@ static inline void user_single_step_siginfo(struct task_struct *tsk, | |||
344 | #define signal_pt_regs() task_pt_regs(current) | 344 | #define signal_pt_regs() task_pt_regs(current) |
345 | #endif | 345 | #endif |
346 | 346 | ||
347 | #ifndef current_user_stack_pointer | ||
348 | #define current_user_stack_pointer() user_stack_pointer(current_pt_regs()) | ||
349 | #endif | ||
350 | |||
347 | extern int task_current_syscall(struct task_struct *target, long *callno, | 351 | extern int task_current_syscall(struct task_struct *target, long *callno, |
348 | unsigned long args[6], unsigned int maxargs, | 352 | unsigned long args[6], unsigned int maxargs, |
349 | unsigned long *sp, unsigned long *pc); | 353 | unsigned long *sp, unsigned long *pc); |
diff --git a/include/linux/sched.h b/include/linux/sched.h index f712465b05c5..206bb089c06b 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -2353,9 +2353,7 @@ extern int do_execve(const char *, | |||
2353 | const char __user * const __user *); | 2353 | const char __user * const __user *); |
2354 | extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *); | 2354 | extern long do_fork(unsigned long, unsigned long, unsigned long, int __user *, int __user *); |
2355 | struct task_struct *fork_idle(int); | 2355 | struct task_struct *fork_idle(int); |
2356 | #ifdef CONFIG_GENERIC_KERNEL_THREAD | ||
2357 | extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); | 2356 | extern pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); |
2358 | #endif | ||
2359 | 2357 | ||
2360 | extern void set_task_comm(struct task_struct *tsk, char *from); | 2358 | extern void set_task_comm(struct task_struct *tsk, char *from); |
2361 | extern char *get_task_comm(char *to, struct task_struct *tsk); | 2359 | extern char *get_task_comm(char *to, struct task_struct *tsk); |
diff --git a/include/linux/signal.h b/include/linux/signal.h index e19a011b43b7..0a89ffc48466 100644 --- a/include/linux/signal.h +++ b/include/linux/signal.h | |||
@@ -385,4 +385,7 @@ int unhandled_signal(struct task_struct *tsk, int sig); | |||
385 | 385 | ||
386 | void signals_init(void); | 386 | void signals_init(void); |
387 | 387 | ||
388 | int restore_altstack(const stack_t __user *); | ||
389 | int __save_altstack(stack_t __user *, unsigned long); | ||
390 | |||
388 | #endif /* _LINUX_SIGNAL_H */ | 391 | #endif /* _LINUX_SIGNAL_H */ |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 6caee34bf8a2..45e2db270255 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
@@ -63,6 +63,7 @@ struct getcpu_cache; | |||
63 | struct old_linux_dirent; | 63 | struct old_linux_dirent; |
64 | struct perf_event_attr; | 64 | struct perf_event_attr; |
65 | struct file_handle; | 65 | struct file_handle; |
66 | struct sigaltstack; | ||
66 | 67 | ||
67 | #include <linux/types.h> | 68 | #include <linux/types.h> |
68 | #include <linux/aio_abi.h> | 69 | #include <linux/aio_abi.h> |
@@ -299,6 +300,11 @@ asmlinkage long sys_personality(unsigned int personality); | |||
299 | asmlinkage long sys_sigpending(old_sigset_t __user *set); | 300 | asmlinkage long sys_sigpending(old_sigset_t __user *set); |
300 | asmlinkage long sys_sigprocmask(int how, old_sigset_t __user *set, | 301 | asmlinkage long sys_sigprocmask(int how, old_sigset_t __user *set, |
301 | old_sigset_t __user *oset); | 302 | old_sigset_t __user *oset); |
303 | #ifdef CONFIG_GENERIC_SIGALTSTACK | ||
304 | asmlinkage long sys_sigaltstack(const struct sigaltstack __user *uss, | ||
305 | struct sigaltstack __user *uoss); | ||
306 | #endif | ||
307 | |||
302 | asmlinkage long sys_getitimer(int which, struct itimerval __user *value); | 308 | asmlinkage long sys_getitimer(int which, struct itimerval __user *value); |
303 | asmlinkage long sys_setitimer(int which, | 309 | asmlinkage long sys_setitimer(int which, |
304 | struct itimerval __user *value, | 310 | struct itimerval __user *value, |
@@ -827,15 +833,6 @@ asmlinkage long sys_fanotify_mark(int fanotify_fd, unsigned int flags, | |||
827 | const char __user *pathname); | 833 | const char __user *pathname); |
828 | asmlinkage long sys_syncfs(int fd); | 834 | asmlinkage long sys_syncfs(int fd); |
829 | 835 | ||
830 | #ifndef CONFIG_GENERIC_KERNEL_EXECVE | ||
831 | int kernel_execve(const char *filename, const char *const argv[], const char *const envp[]); | ||
832 | #else | ||
833 | #define kernel_execve(filename, argv, envp) \ | ||
834 | do_execve(filename, \ | ||
835 | (const char __user *const __user *)argv, \ | ||
836 | (const char __user *const __user *)envp) | ||
837 | #endif | ||
838 | |||
839 | asmlinkage long sys_fork(void); | 836 | asmlinkage long sys_fork(void); |
840 | asmlinkage long sys_vfork(void); | 837 | asmlinkage long sys_vfork(void); |
841 | #ifdef CONFIG_CLONE_BACKWARDS | 838 | #ifdef CONFIG_CLONE_BACKWARDS |
diff --git a/include/uapi/asm-generic/signal.h b/include/uapi/asm-generic/signal.h index 0a78028984de..6fae30fd16ab 100644 --- a/include/uapi/asm-generic/signal.h +++ b/include/uapi/asm-generic/signal.h | |||
@@ -80,12 +80,6 @@ | |||
80 | * SA_RESTORER 0x04000000 | 80 | * SA_RESTORER 0x04000000 |
81 | */ | 81 | */ |
82 | 82 | ||
83 | /* | ||
84 | * sigaltstack controls | ||
85 | */ | ||
86 | #define SS_ONSTACK 1 | ||
87 | #define SS_DISABLE 2 | ||
88 | |||
89 | #define MINSIGSTKSZ 2048 | 83 | #define MINSIGSTKSZ 2048 |
90 | #define SIGSTKSZ 8192 | 84 | #define SIGSTKSZ 8192 |
91 | 85 | ||
diff --git a/include/uapi/linux/signal.h b/include/uapi/linux/signal.h index dff452ed6d00..e1bd50c29ded 100644 --- a/include/uapi/linux/signal.h +++ b/include/uapi/linux/signal.h | |||
@@ -4,5 +4,7 @@ | |||
4 | #include <asm/signal.h> | 4 | #include <asm/signal.h> |
5 | #include <asm/siginfo.h> | 5 | #include <asm/siginfo.h> |
6 | 6 | ||
7 | #define SS_ONSTACK 1 | ||
8 | #define SS_DISABLE 2 | ||
7 | 9 | ||
8 | #endif /* _UAPI_LINUX_SIGNAL_H */ | 10 | #endif /* _UAPI_LINUX_SIGNAL_H */ |
diff --git a/init/main.c b/init/main.c index baf1f0f5c461..85d69dffe864 100644 --- a/init/main.c +++ b/init/main.c | |||
@@ -797,7 +797,9 @@ static void __init do_pre_smp_initcalls(void) | |||
797 | static int run_init_process(const char *init_filename) | 797 | static int run_init_process(const char *init_filename) |
798 | { | 798 | { |
799 | argv_init[0] = init_filename; | 799 | argv_init[0] = init_filename; |
800 | return kernel_execve(init_filename, argv_init, envp_init); | 800 | return do_execve(init_filename, |
801 | (const char __user *const __user *)argv_init, | ||
802 | (const char __user *const __user *)envp_init); | ||
801 | } | 803 | } |
802 | 804 | ||
803 | static void __init kernel_init_freeable(void); | 805 | static void __init kernel_init_freeable(void); |
diff --git a/kernel/fork.c b/kernel/fork.c index 85f6d536608d..a31b823b3c2d 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1613,7 +1613,6 @@ long do_fork(unsigned long clone_flags, | |||
1613 | return nr; | 1613 | return nr; |
1614 | } | 1614 | } |
1615 | 1615 | ||
1616 | #ifdef CONFIG_GENERIC_KERNEL_THREAD | ||
1617 | /* | 1616 | /* |
1618 | * Create a kernel thread. | 1617 | * Create a kernel thread. |
1619 | */ | 1618 | */ |
@@ -1622,7 +1621,6 @@ pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags) | |||
1622 | return do_fork(flags|CLONE_VM|CLONE_UNTRACED, (unsigned long)fn, | 1621 | return do_fork(flags|CLONE_VM|CLONE_UNTRACED, (unsigned long)fn, |
1623 | (unsigned long)arg, NULL, NULL); | 1622 | (unsigned long)arg, NULL, NULL); |
1624 | } | 1623 | } |
1625 | #endif | ||
1626 | 1624 | ||
1627 | #ifdef __ARCH_WANT_SYS_FORK | 1625 | #ifdef __ARCH_WANT_SYS_FORK |
1628 | SYSCALL_DEFINE0(fork) | 1626 | SYSCALL_DEFINE0(fork) |
diff --git a/kernel/kmod.c b/kernel/kmod.c index 1c317e386831..0023a87e8de6 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c | |||
@@ -219,9 +219,9 @@ static int ____call_usermodehelper(void *data) | |||
219 | 219 | ||
220 | commit_creds(new); | 220 | commit_creds(new); |
221 | 221 | ||
222 | retval = kernel_execve(sub_info->path, | 222 | retval = do_execve(sub_info->path, |
223 | (const char *const *)sub_info->argv, | 223 | (const char __user *const __user *)sub_info->argv, |
224 | (const char *const *)sub_info->envp); | 224 | (const char __user *const __user *)sub_info->envp); |
225 | if (!retval) | 225 | if (!retval) |
226 | return 0; | 226 | return 0; |
227 | 227 | ||
diff --git a/kernel/signal.c b/kernel/signal.c index 580a91e63471..7aaa51d8e5b8 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/nsproxy.h> | 31 | #include <linux/nsproxy.h> |
32 | #include <linux/user_namespace.h> | 32 | #include <linux/user_namespace.h> |
33 | #include <linux/uprobes.h> | 33 | #include <linux/uprobes.h> |
34 | #include <linux/compat.h> | ||
34 | #define CREATE_TRACE_POINTS | 35 | #define CREATE_TRACE_POINTS |
35 | #include <trace/events/signal.h> | 36 | #include <trace/events/signal.h> |
36 | 37 | ||
@@ -3094,6 +3095,79 @@ do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long s | |||
3094 | out: | 3095 | out: |
3095 | return error; | 3096 | return error; |
3096 | } | 3097 | } |
3098 | #ifdef CONFIG_GENERIC_SIGALTSTACK | ||
3099 | SYSCALL_DEFINE2(sigaltstack,const stack_t __user *,uss, stack_t __user *,uoss) | ||
3100 | { | ||
3101 | return do_sigaltstack(uss, uoss, current_user_stack_pointer()); | ||
3102 | } | ||
3103 | #endif | ||
3104 | |||
3105 | int restore_altstack(const stack_t __user *uss) | ||
3106 | { | ||
3107 | int err = do_sigaltstack(uss, NULL, current_user_stack_pointer()); | ||
3108 | /* squash all but EFAULT for now */ | ||
3109 | return err == -EFAULT ? err : 0; | ||
3110 | } | ||
3111 | |||
3112 | int __save_altstack(stack_t __user *uss, unsigned long sp) | ||
3113 | { | ||
3114 | struct task_struct *t = current; | ||
3115 | return __put_user((void __user *)t->sas_ss_sp, &uss->ss_sp) | | ||
3116 | __put_user(sas_ss_flags(sp), &uss->ss_flags) | | ||
3117 | __put_user(t->sas_ss_size, &uss->ss_size); | ||
3118 | } | ||
3119 | |||
3120 | #ifdef CONFIG_COMPAT | ||
3121 | #ifdef CONFIG_GENERIC_SIGALTSTACK | ||
3122 | asmlinkage long compat_sys_sigaltstack(const compat_stack_t __user *uss_ptr, | ||
3123 | compat_stack_t __user *uoss_ptr) | ||
3124 | { | ||
3125 | stack_t uss, uoss; | ||
3126 | int ret; | ||
3127 | mm_segment_t seg; | ||
3128 | |||
3129 | if (uss_ptr) { | ||
3130 | compat_stack_t uss32; | ||
3131 | |||
3132 | memset(&uss, 0, sizeof(stack_t)); | ||
3133 | if (copy_from_user(&uss32, uss_ptr, sizeof(compat_stack_t))) | ||
3134 | return -EFAULT; | ||
3135 | uss.ss_sp = compat_ptr(uss32.ss_sp); | ||
3136 | uss.ss_flags = uss32.ss_flags; | ||
3137 | uss.ss_size = uss32.ss_size; | ||
3138 | } | ||
3139 | seg = get_fs(); | ||
3140 | set_fs(KERNEL_DS); | ||
3141 | ret = do_sigaltstack((stack_t __force __user *) (uss_ptr ? &uss : NULL), | ||
3142 | (stack_t __force __user *) &uoss, | ||
3143 | compat_user_stack_pointer()); | ||
3144 | set_fs(seg); | ||
3145 | if (ret >= 0 && uoss_ptr) { | ||
3146 | if (!access_ok(VERIFY_WRITE, uoss_ptr, sizeof(compat_stack_t)) || | ||
3147 | __put_user(ptr_to_compat(uoss.ss_sp), &uoss_ptr->ss_sp) || | ||
3148 | __put_user(uoss.ss_flags, &uoss_ptr->ss_flags) || | ||
3149 | __put_user(uoss.ss_size, &uoss_ptr->ss_size)) | ||
3150 | ret = -EFAULT; | ||
3151 | } | ||
3152 | return ret; | ||
3153 | } | ||
3154 | |||
3155 | int compat_restore_altstack(const compat_stack_t __user *uss) | ||
3156 | { | ||
3157 | int err = compat_sys_sigaltstack(uss, NULL); | ||
3158 | /* squash all but -EFAULT for now */ | ||
3159 | return err == -EFAULT ? err : 0; | ||
3160 | } | ||
3161 | |||
3162 | int __compat_save_altstack(compat_stack_t __user *uss, unsigned long sp) | ||
3163 | { | ||
3164 | struct task_struct *t = current; | ||
3165 | return __put_user(ptr_to_compat((void __user *)t->sas_ss_sp), &uss->ss_sp) | | ||
3166 | __put_user(sas_ss_flags(sp), &uss->ss_flags) | | ||
3167 | __put_user(t->sas_ss_size, &uss->ss_size); | ||
3168 | } | ||
3169 | #endif | ||
3170 | #endif | ||
3097 | 3171 | ||
3098 | #ifdef __ARCH_WANT_SYS_SIGPENDING | 3172 | #ifdef __ARCH_WANT_SYS_SIGPENDING |
3099 | 3173 | ||