提交 eaca6eae 编写于 作者: A Al Viro

sanitize rt_sigaction() situation a bit

	Switch from __ARCH_WANT_SYS_RT_SIGACTION to opposite
(!CONFIG_ODD_RT_SIGACTION); the only two architectures that
need it are alpha and sparc.  The reason for use of CONFIG_...
instead of __ARCH_... is that it's needed only kernel-side
and doing it that way avoids a mess with include order on many
architectures.
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 37784074
...@@ -373,4 +373,9 @@ config CLONE_BACKWARDS2 ...@@ -373,4 +373,9 @@ config CLONE_BACKWARDS2
help help
Architecture has the first two arguments of clone(2) swapped. Architecture has the first two arguments of clone(2) swapped.
config ODD_RT_SIGACTION
bool
help
Architecture has unusual rt_sigaction(2) arguments
source "kernel/gcov/Kconfig" source "kernel/gcov/Kconfig"
...@@ -23,6 +23,7 @@ config ALPHA ...@@ -23,6 +23,7 @@ config ALPHA
select HAVE_MOD_ARCH_SPECIFIC select HAVE_MOD_ARCH_SPECIFIC
select MODULES_USE_ELF_RELA select MODULES_USE_ELF_RELA
select GENERIC_SIGALTSTACK select GENERIC_SIGALTSTACK
select ODD_RT_SIGACTION
help help
The Alpha is a 64-bit general-purpose processor designed and The Alpha is a 64-bit general-purpose processor designed and
marketed by the Digital Equipment Corporation of blessed memory, marketed by the Digital Equipment Corporation of blessed memory,
......
...@@ -49,10 +49,6 @@ asmlinkage unsigned long sys_mmap2( ...@@ -49,10 +49,6 @@ asmlinkage unsigned long sys_mmap2(
struct pt_regs; struct pt_regs;
struct sigaction; struct sigaction;
asmlinkage long sys_ia64_pipe(void); asmlinkage long sys_ia64_pipe(void);
asmlinkage long sys_rt_sigaction(int sig,
const struct sigaction __user *act,
struct sigaction __user *oact,
size_t sigsetsize);
/* /*
* "Conditional" syscalls * "Conditional" syscalls
......
...@@ -19,9 +19,6 @@ asmlinkage unsigned long sys_mmap2(unsigned long addr, size_t len, ...@@ -19,9 +19,6 @@ asmlinkage unsigned long sys_mmap2(unsigned long addr, size_t len,
unsigned long fd, unsigned long pgoff); unsigned long fd, unsigned long pgoff);
asmlinkage long sys_pipe(int __user *fildes); asmlinkage long sys_pipe(int __user *fildes);
asmlinkage long sys_pipe2(int __user *fildes, int flags); asmlinkage long sys_pipe2(int __user *fildes, int flags);
asmlinkage long sys_rt_sigaction(int sig,
const struct sigaction __user *act,
struct sigaction __user *oact, size_t sigsetsize);
asmlinkage long ppc64_personality(unsigned long personality); asmlinkage long ppc64_personality(unsigned long personality);
asmlinkage int ppc_rtas(struct rtas_args __user *uargs); asmlinkage int ppc_rtas(struct rtas_args __user *uargs);
asmlinkage time_t sys64_time(time_t __user * tloc); asmlinkage time_t sys64_time(time_t __user * tloc);
......
...@@ -41,6 +41,7 @@ config SPARC ...@@ -41,6 +41,7 @@ config SPARC
select GENERIC_STRNCPY_FROM_USER select GENERIC_STRNCPY_FROM_USER
select GENERIC_STRNLEN_USER select GENERIC_STRNLEN_USER
select MODULES_USE_ELF_RELA select MODULES_USE_ELF_RELA
select ODD_RT_SIGACTION
config SPARC32 config SPARC32
def_bool !64BIT def_bool !64BIT
......
...@@ -197,12 +197,11 @@ sparc_sigaction (int sig, const struct old_sigaction __user *act, ...@@ -197,12 +197,11 @@ sparc_sigaction (int sig, const struct old_sigaction __user *act,
return ret; return ret;
} }
asmlinkage long SYSCALL_DEFINE5(rt_sigaction, int, sig,
sys_rt_sigaction(int sig, const struct sigaction __user *, act,
const struct sigaction __user *act, struct sigaction __user *, oact,
struct sigaction __user *oact, void __user *, restorer,
void __user *restorer, size_t, sigsetsize)
size_t sigsetsize)
{ {
struct k_sigaction new_ka, old_ka; struct k_sigaction new_ka, old_ka;
int ret; int ret;
......
...@@ -8,11 +8,6 @@ ...@@ -8,11 +8,6 @@
typedef long syscall_handler_t(struct pt_regs); typedef long syscall_handler_t(struct pt_regs);
/* Not declared on x86, incompatible declarations on x86_64, so these have
* to go here rather than in sys_call_table.c
*/
extern syscall_handler_t sys_rt_sigaction;
extern syscall_handler_t *sys_call_table[]; extern syscall_handler_t *sys_call_table[];
#define EXECUTE_SYSCALL(syscall, regs) \ #define EXECUTE_SYSCALL(syscall, regs) \
......
...@@ -9,15 +9,10 @@ ...@@ -9,15 +9,10 @@
*/ */
struct pt_regs; struct pt_regs;
struct sigaction;
asmlinkage long xtensa_ptrace(long, long, long, long); asmlinkage long xtensa_ptrace(long, long, long, long);
asmlinkage long xtensa_sigreturn(struct pt_regs*); asmlinkage long xtensa_sigreturn(struct pt_regs*);
asmlinkage long xtensa_rt_sigreturn(struct pt_regs*); asmlinkage long xtensa_rt_sigreturn(struct pt_regs*);
asmlinkage long xtensa_sigaltstack(struct pt_regs *regs); asmlinkage long xtensa_sigaltstack(struct pt_regs *regs);
asmlinkage long sys_rt_sigaction(int,
const struct sigaction __user *,
struct sigaction __user *,
size_t);
asmlinkage long xtensa_shmat(int, char __user *, int); asmlinkage long xtensa_shmat(int, char __user *, int);
asmlinkage long xtensa_fadvise64_64(int, int, asmlinkage long xtensa_fadvise64_64(int, int,
unsigned long long, unsigned long long); unsigned long long, unsigned long long);
......
...@@ -36,9 +36,4 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs); ...@@ -36,9 +36,4 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs);
asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize); asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize);
#endif #endif
#ifndef sys_rt_sigaction
asmlinkage long sys_rt_sigaction(int sig, const struct sigaction __user *act,
struct sigaction __user *oact, size_t sigsetsize);
#endif
#endif /* __ASM_GENERIC_SYSCALLS_H */ #endif /* __ASM_GENERIC_SYSCALLS_H */
...@@ -377,6 +377,12 @@ asmlinkage long sys_init_module(void __user *umod, unsigned long len, ...@@ -377,6 +377,12 @@ asmlinkage long sys_init_module(void __user *umod, unsigned long len,
asmlinkage long sys_delete_module(const char __user *name_user, asmlinkage long sys_delete_module(const char __user *name_user,
unsigned int flags); unsigned int flags);
#ifndef CONFIG_ODD_RT_SIGACTION
asmlinkage long sys_rt_sigaction(int,
const struct sigaction __user *,
struct sigaction __user *,
size_t);
#endif
asmlinkage long sys_rt_sigprocmask(int how, sigset_t __user *set, asmlinkage long sys_rt_sigprocmask(int how, sigset_t __user *set,
sigset_t __user *oset, size_t sigsetsize); sigset_t __user *oset, size_t sigsetsize);
asmlinkage long sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize); asmlinkage long sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize);
......
...@@ -3231,7 +3231,7 @@ SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset, ...@@ -3231,7 +3231,7 @@ SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset,
} }
#endif /* __ARCH_WANT_SYS_SIGPROCMASK */ #endif /* __ARCH_WANT_SYS_SIGPROCMASK */
#ifdef __ARCH_WANT_SYS_RT_SIGACTION #ifndef CONFIG_ODD_RT_SIGACTION
/** /**
* sys_rt_sigaction - alter an action taken by a process * sys_rt_sigaction - alter an action taken by a process
* @sig: signal to be sent * @sig: signal to be sent
...@@ -3265,7 +3265,7 @@ SYSCALL_DEFINE4(rt_sigaction, int, sig, ...@@ -3265,7 +3265,7 @@ SYSCALL_DEFINE4(rt_sigaction, int, sig,
out: out:
return ret; return ret;
} }
#endif /* __ARCH_WANT_SYS_RT_SIGACTION */ #endif /* !CONFIG_ODD_RT_SIGACTION */
#ifdef __ARCH_WANT_SYS_SGETMASK #ifdef __ARCH_WANT_SYS_SGETMASK
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册