Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
Pull signal handling cleanups from Al Viro: "This is the first pile; another one will come a bit later and will contain SYSCALL_DEFINE-related patches. - a bunch of signal-related syscalls (both native and compat) unified. - a bunch of compat syscalls switched to COMPAT_SYSCALL_DEFINE (fixing several potential problems with missing argument validation, while we are at it) - a lot of now-pointless wrappers killed - a couple of architectures (cris and hexagon) forgot to save altstack settings into sigframe, even though they used the (uninitialized) values in sigreturn; fixed. - microblaze fixes for delivery of multiple signals arriving at once - saner set of helpers for signal delivery introduced, several architectures switched to using those." * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal: (143 commits) x86: convert to ksignal sparc: convert to ksignal arm: switch to struct ksignal * passing alpha: pass k_sigaction and siginfo_t using ksignal pointer burying unused conditionals make do_sigaltstack() static arm64: switch to generic old sigaction() (compat-only) arm64: switch to generic compat rt_sigaction() arm64: switch compat to generic old sigsuspend arm64: switch to generic compat rt_sigqueueinfo() arm64: switch to generic compat rt_sigpending() arm64: switch to generic compat rt_sigprocmask() arm64: switch to generic sigaltstack sparc: switch to generic old sigsuspend sparc: COMPAT_SYSCALL_DEFINE does all sign-extension as well as SYSCALL_DEFINE sparc: kill sign-extending wrappers for native syscalls kill sparc32_open() sparc: switch to use of generic old sigaction sparc: switch sys_compat_rt_sigaction() to COMPAT_SYSCALL_DEFINE mips: switch to generic sys_fork() and sys_clone() ...
This commit is contained in:
@@ -26,9 +26,10 @@
|
||||
#ifdef CONFIG_X86_64
|
||||
# include <asm/sigcontext32.h>
|
||||
# include <asm/user32.h>
|
||||
int ia32_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
||||
struct ksignal;
|
||||
int ia32_setup_rt_frame(int sig, struct ksignal *ksig,
|
||||
compat_sigset_t *set, struct pt_regs *regs);
|
||||
int ia32_setup_frame(int sig, struct k_sigaction *ka,
|
||||
int ia32_setup_frame(int sig, struct ksignal *ksig,
|
||||
compat_sigset_t *set, struct pt_regs *regs);
|
||||
#else
|
||||
# define user_i387_ia32_struct user_i387_struct
|
||||
|
@@ -13,21 +13,6 @@
|
||||
#include <asm/sigcontext32.h>
|
||||
|
||||
/* signal.h */
|
||||
struct sigaction32 {
|
||||
unsigned int sa_handler; /* Really a pointer, but need to deal
|
||||
with 32 bits */
|
||||
unsigned int sa_flags;
|
||||
unsigned int sa_restorer; /* Another 32 bit pointer */
|
||||
compat_sigset_t sa_mask; /* A 32 bit mask */
|
||||
};
|
||||
|
||||
struct old_sigaction32 {
|
||||
unsigned int sa_handler; /* Really a pointer, but need to deal
|
||||
with 32 bits */
|
||||
compat_old_sigset_t sa_mask; /* A 32 bit mask */
|
||||
unsigned int sa_flags;
|
||||
unsigned int sa_restorer; /* Another 32 bit pointer */
|
||||
};
|
||||
|
||||
struct ucontext_ia32 {
|
||||
unsigned int uc_flags;
|
||||
|
@@ -31,27 +31,9 @@ typedef sigset_t compat_sigset_t;
|
||||
#include <uapi/asm/signal.h>
|
||||
#ifndef __ASSEMBLY__
|
||||
extern void do_notify_resume(struct pt_regs *, void *, __u32);
|
||||
#ifdef __i386__
|
||||
struct old_sigaction {
|
||||
__sighandler_t sa_handler;
|
||||
old_sigset_t sa_mask;
|
||||
unsigned long sa_flags;
|
||||
__sigrestore_t sa_restorer;
|
||||
};
|
||||
|
||||
struct sigaction {
|
||||
__sighandler_t sa_handler;
|
||||
unsigned long sa_flags;
|
||||
__sigrestore_t sa_restorer;
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
#define __ARCH_HAS_SA_RESTORER
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
};
|
||||
|
||||
#else /* __i386__ */
|
||||
#endif /* !__i386__ */
|
||||
#include <asm/sigcontext.h>
|
||||
|
||||
#ifdef __i386__
|
||||
|
@@ -32,22 +32,11 @@ struct mmap_arg_struct32;
|
||||
asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *);
|
||||
asmlinkage long sys32_mprotect(unsigned long, size_t, unsigned long);
|
||||
|
||||
struct sigaction32;
|
||||
struct old_sigaction32;
|
||||
asmlinkage long sys32_rt_sigaction(int, struct sigaction32 __user *,
|
||||
struct sigaction32 __user *, unsigned int);
|
||||
asmlinkage long sys32_sigaction(int, struct old_sigaction32 __user *,
|
||||
struct old_sigaction32 __user *);
|
||||
asmlinkage long sys32_alarm(unsigned int);
|
||||
|
||||
asmlinkage long sys32_waitpid(compat_pid_t, unsigned int __user *, int);
|
||||
asmlinkage long sys32_sysfs(int, u32, u32);
|
||||
|
||||
asmlinkage long sys32_sched_rr_get_interval(compat_pid_t,
|
||||
struct compat_timespec __user *);
|
||||
asmlinkage long sys32_rt_sigpending(compat_sigset_t __user *, compat_size_t);
|
||||
asmlinkage long sys32_rt_sigqueueinfo(int, int, compat_siginfo_t __user *);
|
||||
|
||||
asmlinkage long sys32_pread(unsigned int, char __user *, u32, u32, u32);
|
||||
asmlinkage long sys32_pwrite(unsigned int, const char __user *, u32, u32, u32);
|
||||
|
||||
@@ -68,9 +57,8 @@ asmlinkage long sys32_fallocate(int, int, unsigned,
|
||||
unsigned, unsigned, unsigned);
|
||||
|
||||
/* ia32/ia32_signal.c */
|
||||
asmlinkage long sys32_sigsuspend(int, int, old_sigset_t);
|
||||
asmlinkage long sys32_sigreturn(struct pt_regs *);
|
||||
asmlinkage long sys32_rt_sigreturn(struct pt_regs *);
|
||||
asmlinkage long sys32_sigreturn(void);
|
||||
asmlinkage long sys32_rt_sigreturn(void);
|
||||
|
||||
/* ia32/ipc32.c */
|
||||
asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32);
|
||||
|
@@ -18,13 +18,13 @@
|
||||
/* Common in X86_32 and X86_64 */
|
||||
/* kernel/ioport.c */
|
||||
asmlinkage long sys_ioperm(unsigned long, unsigned long, int);
|
||||
long sys_iopl(unsigned int, struct pt_regs *);
|
||||
asmlinkage long sys_iopl(unsigned int);
|
||||
|
||||
/* kernel/ldt.c */
|
||||
asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
|
||||
|
||||
/* kernel/signal.c */
|
||||
long sys_rt_sigreturn(struct pt_regs *);
|
||||
long sys_rt_sigreturn(void);
|
||||
|
||||
/* kernel/tls.c */
|
||||
asmlinkage int sys_set_thread_area(struct user_desc __user *);
|
||||
@@ -34,14 +34,11 @@ asmlinkage int sys_get_thread_area(struct user_desc __user *);
|
||||
#ifdef CONFIG_X86_32
|
||||
|
||||
/* kernel/signal.c */
|
||||
asmlinkage int sys_sigsuspend(int, int, old_sigset_t);
|
||||
asmlinkage int sys_sigaction(int, const struct old_sigaction __user *,
|
||||
struct old_sigaction __user *);
|
||||
unsigned long sys_sigreturn(struct pt_regs *);
|
||||
unsigned long sys_sigreturn(void);
|
||||
|
||||
/* kernel/vm86_32.c */
|
||||
int sys_vm86old(struct vm86_struct __user *, struct pt_regs *);
|
||||
int sys_vm86(unsigned long, unsigned long, struct pt_regs *);
|
||||
int sys_vm86old(struct vm86_struct __user *);
|
||||
int sys_vm86(unsigned long, unsigned long);
|
||||
|
||||
#else /* CONFIG_X86_32 */
|
||||
|
||||
|
@@ -38,8 +38,6 @@
|
||||
# define __ARCH_WANT_SYS_OLD_GETRLIMIT
|
||||
# define __ARCH_WANT_SYS_OLD_UNAME
|
||||
# define __ARCH_WANT_SYS_PAUSE
|
||||
# define __ARCH_WANT_SYS_RT_SIGACTION
|
||||
# define __ARCH_WANT_SYS_RT_SIGSUSPEND
|
||||
# define __ARCH_WANT_SYS_SGETMASK
|
||||
# define __ARCH_WANT_SYS_SIGNAL
|
||||
# define __ARCH_WANT_SYS_SIGPENDING
|
||||
|
@@ -95,9 +95,9 @@ typedef unsigned long sigset_t;
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
|
||||
#ifdef __i386__
|
||||
# ifndef __KERNEL__
|
||||
/* Here we must cater to libcs that poke about in kernel headers. */
|
||||
#ifdef __i386__
|
||||
|
||||
struct sigaction {
|
||||
union {
|
||||
@@ -112,7 +112,6 @@ struct sigaction {
|
||||
#define sa_handler _u._sa_handler
|
||||
#define sa_sigaction _u._sa_sigaction
|
||||
|
||||
# endif /* ! __KERNEL__ */
|
||||
#else /* __i386__ */
|
||||
|
||||
struct sigaction {
|
||||
@@ -122,11 +121,8 @@ struct sigaction {
|
||||
sigset_t sa_mask; /* mask last for extensibility */
|
||||
};
|
||||
|
||||
struct k_sigaction {
|
||||
struct sigaction sa;
|
||||
};
|
||||
|
||||
#endif /* !__i386__ */
|
||||
# endif /* ! __KERNEL__ */
|
||||
|
||||
typedef struct sigaltstack {
|
||||
void __user *ss_sp;
|
||||
|
Reference in New Issue
Block a user