introduce generic sys_sigaltstack(), switch x86 and um to it

Conditional on CONFIG_GENERIC_SIGALTSTACK; architectures that do not
select it are completely unaffected

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Al Viro 2012-12-14 14:09:47 -05:00
parent 9b064fc3f9
commit 6bf9adfc90
14 changed files with 19 additions and 21 deletions

View File

@ -335,6 +335,9 @@ config MODULES_USE_ELF_REL
Modules only use ELF REL relocations. Modules with ELF RELA Modules only use ELF REL relocations. Modules with ELF RELA
relocations will give an error. relocations will give an error.
config GENERIC_SIGALTSTACK
bool
# #
# ABI hall of shame # ABI hall of shame
# #

View File

@ -132,8 +132,3 @@ long sys_sigsuspend(int history0, int history1, old_sigset_t mask)
siginitset(&blocked, mask); siginitset(&blocked, mask);
return sigsuspend(&blocked); return sigsuspend(&blocked);
} }
long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss)
{
return do_sigaltstack(uss, uoss, PT_REGS_SP(&current->thread.regs));
}

View File

@ -111,6 +111,7 @@ config X86
select MODULES_USE_ELF_REL if X86_32 select MODULES_USE_ELF_REL if X86_32
select MODULES_USE_ELF_RELA if X86_64 select MODULES_USE_ELF_RELA if X86_64
select CLONE_BACKWARDS if X86_32 select CLONE_BACKWARDS if X86_32
select GENERIC_SIGALTSTACK
config INSTRUCTION_DECODER config INSTRUCTION_DECODER
def_bool y def_bool y

View File

@ -25,9 +25,6 @@ asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
/* kernel/signal.c */ /* kernel/signal.c */
long sys_rt_sigreturn(struct pt_regs *); long sys_rt_sigreturn(struct pt_regs *);
long sys_sigaltstack(const stack_t __user *, stack_t __user *,
struct pt_regs *);
/* kernel/tls.c */ /* kernel/tls.c */
asmlinkage int sys_set_thread_area(struct user_desc __user *); asmlinkage int sys_set_thread_area(struct user_desc __user *);

View File

@ -739,7 +739,6 @@ ENTRY(ptregs_##name) ; \
ENDPROC(ptregs_##name) ENDPROC(ptregs_##name)
PTREGSCALL1(iopl) PTREGSCALL1(iopl)
PTREGSCALL2(sigaltstack)
PTREGSCALL0(sigreturn) PTREGSCALL0(sigreturn)
PTREGSCALL0(rt_sigreturn) PTREGSCALL0(rt_sigreturn)
PTREGSCALL2(vm86) PTREGSCALL2(vm86)

View File

@ -864,7 +864,6 @@ END(stub_\func)
FORK_LIKE clone FORK_LIKE clone
FORK_LIKE fork FORK_LIKE fork
FORK_LIKE vfork FORK_LIKE vfork
PTREGSCALL stub_sigaltstack, sys_sigaltstack, %rdx
PTREGSCALL stub_iopl, sys_iopl, %rsi PTREGSCALL stub_iopl, sys_iopl, %rsi
ENTRY(ptregscall_common) ENTRY(ptregscall_common)

View File

@ -602,13 +602,6 @@ sys_sigaction(int sig, const struct old_sigaction __user *act,
} }
#endif /* CONFIG_X86_32 */ #endif /* CONFIG_X86_32 */
long
sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
struct pt_regs *regs)
{
return do_sigaltstack(uss, uoss, regs->sp);
}
/* /*
* Do a signal return; undo the signal stack. * Do a signal return; undo the signal stack.
*/ */

View File

@ -192,7 +192,7 @@
183 i386 getcwd sys_getcwd 183 i386 getcwd sys_getcwd
184 i386 capget sys_capget 184 i386 capget sys_capget
185 i386 capset sys_capset 185 i386 capset sys_capset
186 i386 sigaltstack ptregs_sigaltstack stub32_sigaltstack 186 i386 sigaltstack sys_sigaltstack stub32_sigaltstack
187 i386 sendfile sys_sendfile sys32_sendfile 187 i386 sendfile sys_sendfile sys32_sendfile
188 i386 getpmsg 188 i386 getpmsg
189 i386 putpmsg 189 i386 putpmsg

View File

@ -137,7 +137,7 @@
128 64 rt_sigtimedwait sys_rt_sigtimedwait 128 64 rt_sigtimedwait sys_rt_sigtimedwait
129 64 rt_sigqueueinfo sys_rt_sigqueueinfo 129 64 rt_sigqueueinfo sys_rt_sigqueueinfo
130 common rt_sigsuspend sys_rt_sigsuspend 130 common rt_sigsuspend sys_rt_sigsuspend
131 64 sigaltstack stub_sigaltstack 131 64 sigaltstack sys_sigaltstack
132 common utime sys_utime 132 common utime sys_utime
133 common mknod sys_mknod 133 common mknod sys_mknod
134 64 uselib 134 64 uselib

View File

@ -13,6 +13,7 @@ endmenu
config UML_X86 config UML_X86
def_bool y def_bool y
select GENERIC_FIND_FIRST_BIT select GENERIC_FIND_FIRST_BIT
select GENERIC_SIGALTSTACK
config 64BIT config 64BIT
bool "64-bit kernel" if SUBARCH = "x86" bool "64-bit kernel" if SUBARCH = "x86"

View File

@ -27,7 +27,6 @@
#define ptregs_iopl sys_iopl #define ptregs_iopl sys_iopl
#define ptregs_vm86old sys_vm86old #define ptregs_vm86old sys_vm86old
#define ptregs_vm86 sys_vm86 #define ptregs_vm86 sys_vm86
#define ptregs_sigaltstack sys_sigaltstack
#define __SYSCALL_I386(nr, sym, compat) extern asmlinkage void sym(void) ; #define __SYSCALL_I386(nr, sym, compat) extern asmlinkage void sym(void) ;
#include <asm/syscalls_32.h> #include <asm/syscalls_32.h>

View File

@ -31,7 +31,6 @@
#define stub_fork sys_fork #define stub_fork sys_fork
#define stub_vfork sys_vfork #define stub_vfork sys_vfork
#define stub_execve sys_execve #define stub_execve sys_execve
#define stub_sigaltstack sys_sigaltstack
#define stub_rt_sigreturn sys_rt_sigreturn #define stub_rt_sigreturn sys_rt_sigreturn
#define __SYSCALL_COMMON(nr, sym, compat) __SYSCALL_64(nr, sym, compat) #define __SYSCALL_COMMON(nr, sym, compat) __SYSCALL_64(nr, sym, compat)

View File

@ -63,6 +63,7 @@ struct getcpu_cache;
struct old_linux_dirent; struct old_linux_dirent;
struct perf_event_attr; struct perf_event_attr;
struct file_handle; struct file_handle;
struct sigaltstack;
#include <linux/types.h> #include <linux/types.h>
#include <linux/aio_abi.h> #include <linux/aio_abi.h>
@ -299,6 +300,11 @@ asmlinkage long sys_personality(unsigned int personality);
asmlinkage long sys_sigpending(old_sigset_t __user *set); asmlinkage long sys_sigpending(old_sigset_t __user *set);
asmlinkage long sys_sigprocmask(int how, old_sigset_t __user *set, asmlinkage long sys_sigprocmask(int how, old_sigset_t __user *set,
old_sigset_t __user *oset); old_sigset_t __user *oset);
#ifdef CONFIG_GENERIC_SIGALTSTACK
asmlinkage long sys_sigaltstack(const struct sigaltstack __user *uss,
struct sigaltstack __user *uoss);
#endif
asmlinkage long sys_getitimer(int which, struct itimerval __user *value); asmlinkage long sys_getitimer(int which, struct itimerval __user *value);
asmlinkage long sys_setitimer(int which, asmlinkage long sys_setitimer(int which,
struct itimerval __user *value, struct itimerval __user *value,

View File

@ -3102,6 +3102,12 @@ do_sigaltstack (const stack_t __user *uss, stack_t __user *uoss, unsigned long s
out: out:
return error; return error;
} }
#ifdef CONFIG_GENERIC_SIGALTSTACK
SYSCALL_DEFINE2(sigaltstack,const stack_t __user *,uss, stack_t __user *,uoss)
{
return do_sigaltstack(uss, uoss, current_user_stack_pointer());
}
#endif
int restore_altstack(const stack_t __user *uss) int restore_altstack(const stack_t __user *uss)
{ {