x86: switch to generic old sigaction
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 26 Dec 2012 00:14:55 +0000 (19:14 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 3 Feb 2013 23:16:27 +0000 (18:16 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/x86/Kconfig
arch/x86/ia32/sys_ia32.c
arch/x86/include/asm/ia32.h
arch/x86/include/asm/signal.h
arch/x86/include/asm/sys_ia32.h
arch/x86/include/asm/syscalls.h
arch/x86/kernel/signal.c
arch/x86/syscalls/syscall_32.tbl
arch/x86/um/Kconfig
arch/x86/um/Makefile
arch/x86/um/syscalls_32.c [deleted file]

index 0271a14..87d0917 100644 (file)
@@ -118,6 +118,8 @@ config X86
        select GENERIC_COMPAT_RT_SIGQUEUEINFO
        select GENERIC_COMPAT_RT_SIGPENDING
        select OLD_SIGSUSPEND3 if X86_32 || IA32_EMULATION
+       select OLD_SIGACTION if X86_32
+       select COMPAT_OLD_SIGACTION if IA32_EMULATION
 
 config INSTRUCTION_DECODER
        def_bool y
index ffe9751..592f5a9 100644 (file)
@@ -172,45 +172,6 @@ asmlinkage long sys32_mprotect(unsigned long start, size_t len,
        return sys_mprotect(start, len, prot);
 }
 
-asmlinkage long sys32_sigaction(int sig, struct old_sigaction32 __user *act,
-                               struct old_sigaction32 __user *oact)
-{
-       struct k_sigaction new_ka, old_ka;
-       int ret;
-
-       if (act) {
-               compat_old_sigset_t mask;
-               compat_uptr_t handler, restorer;
-
-               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
-                   __get_user(handler, &act->sa_handler) ||
-                   __get_user(new_ka.sa.sa_flags, &act->sa_flags) ||
-                   __get_user(restorer, &act->sa_restorer) ||
-                   __get_user(mask, &act->sa_mask))
-                       return -EFAULT;
-
-               new_ka.sa.sa_handler = compat_ptr(handler);
-               new_ka.sa.sa_restorer = compat_ptr(restorer);
-
-               siginitset(&new_ka.sa.sa_mask, mask);
-       }
-
-       ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
-
-       if (!ret && oact) {
-               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
-                   __put_user(ptr_to_compat(old_ka.sa.sa_handler),
-                              &oact->sa_handler) ||
-                   __put_user(ptr_to_compat(old_ka.sa.sa_restorer),
-                              &oact->sa_restorer) ||
-                   __put_user(old_ka.sa.sa_flags, &oact->sa_flags) ||
-                   __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask))
-                       return -EFAULT;
-       }
-
-       return ret;
-}
-
 asmlinkage long sys32_waitpid(compat_pid_t pid, unsigned int __user *stat_addr,
                              int options)
 {
index 259372d..d0e8e01 100644 (file)
 #include <asm/sigcontext32.h>
 
 /* signal.h */
-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;
index 9bda822..35e67a4 100644 (file)
@@ -34,15 +34,6 @@ extern void do_notify_resume(struct pt_regs *, void *, __u32);
 
 #define __ARCH_HAS_SA_RESTORER
 
-#ifdef __i386__
-struct old_sigaction {
-       __sighandler_t sa_handler;
-       old_sigset_t sa_mask;
-       unsigned long sa_flags;
-       __sigrestore_t sa_restorer;
-};
-
-#endif /* !__i386__ */
 #include <asm/sigcontext.h>
 
 #ifdef __i386__
index 2bf18f1..0218d91 100644 (file)
@@ -32,9 +32,6 @@ struct mmap_arg_struct32;
 asmlinkage long sys32_mmap(struct mmap_arg_struct32 __user *);
 asmlinkage long sys32_mprotect(unsigned long, size_t, unsigned long);
 
-struct old_sigaction32;
-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);
index 7ed7dec..6cf0a9c 100644 (file)
@@ -34,8 +34,6 @@ asmlinkage int sys_get_thread_area(struct user_desc __user *);
 #ifdef CONFIG_X86_32
 
 /* kernel/signal.c */
-asmlinkage int sys_sigaction(int, const struct old_sigaction __user *,
-                            struct old_sigaction __user *);
 unsigned long sys_sigreturn(void);
 
 /* kernel/vm86_32.c */
index 0577129..d5b1f8a 100644 (file)
@@ -535,53 +535,6 @@ static int x32_setup_rt_frame(int sig, struct k_sigaction *ka,
        return 0;
 }
 
-#ifdef CONFIG_X86_32
-asmlinkage int
-sys_sigaction(int sig, const struct old_sigaction __user *act,
-             struct old_sigaction __user *oact)
-{
-       struct k_sigaction new_ka, old_ka;
-       int ret = 0;
-
-       if (act) {
-               old_sigset_t mask;
-
-               if (!access_ok(VERIFY_READ, act, sizeof(*act)))
-                       return -EFAULT;
-
-               get_user_try {
-                       get_user_ex(new_ka.sa.sa_handler, &act->sa_handler);
-                       get_user_ex(new_ka.sa.sa_flags, &act->sa_flags);
-                       get_user_ex(mask, &act->sa_mask);
-                       get_user_ex(new_ka.sa.sa_restorer, &act->sa_restorer);
-               } get_user_catch(ret);
-
-               if (ret)
-                       return -EFAULT;
-               siginitset(&new_ka.sa.sa_mask, mask);
-       }
-
-       ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
-
-       if (!ret && oact) {
-               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)))
-                       return -EFAULT;
-
-               put_user_try {
-                       put_user_ex(old_ka.sa.sa_handler, &oact->sa_handler);
-                       put_user_ex(old_ka.sa.sa_flags, &oact->sa_flags);
-                       put_user_ex(old_ka.sa.sa_mask.sig[0], &oact->sa_mask);
-                       put_user_ex(old_ka.sa.sa_restorer, &oact->sa_restorer);
-               } put_user_catch(ret);
-
-               if (ret)
-                       return -EFAULT;
-       }
-
-       return ret;
-}
-#endif /* CONFIG_X86_32 */
-
 /*
  * Do a signal return; undo the signal stack.
  */
index 2fada84..f2fe78f 100644 (file)
@@ -73,7 +73,7 @@
 64     i386    getppid                 sys_getppid
 65     i386    getpgrp                 sys_getpgrp
 66     i386    setsid                  sys_setsid
-67     i386    sigaction               sys_sigaction                   sys32_sigaction
+67     i386    sigaction               sys_sigaction                   compat_sys_sigaction
 68     i386    sgetmask                sys_sgetmask
 69     i386    ssetmask                sys_ssetmask
 70     i386    setreuid                sys_setreuid16
index a372582..cf0f273 100644 (file)
@@ -26,6 +26,7 @@ config X86_32
        select MODULES_USE_ELF_REL
        select CLONE_BACKWARDS
        select OLD_SIGSUSPEND3
+       select OLD_SIGACTION
 
 config X86_64
        def_bool 64BIT
index 5d065b2..eafa324 100644 (file)
@@ -10,7 +10,7 @@ endif
 
 obj-y = bug.o bugs_$(BITS).o delay.o fault.o ksyms.o ldt.o \
        ptrace_$(BITS).o ptrace_user.o setjmp_$(BITS).o signal.o \
-       stub_$(BITS).o stub_segv.o syscalls_$(BITS).o \
+       stub_$(BITS).o stub_segv.o \
        sys_call_table_$(BITS).o sysrq_$(BITS).o tls_$(BITS).o \
        mem_$(BITS).o subarch.o os-$(OS)/
 
@@ -25,7 +25,7 @@ subarch-$(CONFIG_HIGHMEM) += ../mm/highmem_32.o
 
 else
 
-obj-y += vdso/
+obj-y += syscalls_64.o vdso/
 
 subarch-y = ../lib/csum-partial_64.o ../lib/memcpy_64.o ../lib/thunk_64.o \
                ../lib/rwsem.o
diff --git a/arch/x86/um/syscalls_32.c b/arch/x86/um/syscalls_32.c
deleted file mode 100644 (file)
index e8bcea9..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* 
- * Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
- * Licensed under the GPL
- */
-
-#include <linux/syscalls.h>
-#include <sysdep/syscalls.h>
-
-long sys_sigaction(int sig, const struct old_sigaction __user *act,
-                        struct old_sigaction __user *oact)
-{
-       struct k_sigaction new_ka, old_ka;
-       int ret;
-
-       if (act) {
-               old_sigset_t mask;
-               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
-                   __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
-                   __get_user(new_ka.sa.sa_restorer, &act->sa_restorer) ||
-                   __get_user(new_ka.sa.sa_flags, &act->sa_flags) ||
-                   __get_user(mask, &act->sa_mask))
-                       return -EFAULT;
-               siginitset(&new_ka.sa.sa_mask, mask);
-       }
-
-       ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
-
-       if (!ret && oact) {
-               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
-                   __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
-                   __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer) ||
-                   __put_user(old_ka.sa.sa_flags, &oact->sa_flags) ||
-                   __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask))
-                       return -EFAULT;
-       }
-
-       return ret;
-}