mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-07 13:53:24 +00:00
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:
parent
9b064fc3f9
commit
6bf9adfc90
@ -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
|
||||||
#
|
#
|
||||||
|
@ -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(¤t->thread.regs));
|
|
||||||
}
|
|
||||||
|
@ -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
|
||||||
|
@ -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 *);
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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"
|
||||||
|
@ -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>
|
||||||
|
@ -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)
|
||||||
|
@ -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,
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user