]> git.karo-electronics.de Git - linux-beck.git/commitdiff
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 0271a1411af309e07ca30afc53c16a73be90edbc..87d09175a0a99dd46ebc0345d10c05a4b25ef3ff 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 ffe9751b14864167fb1570309c0a360f74da133e..592f5a9a9c0ee9d1cc3fbdfff8e210fa46862360 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 259372d1ee9665c82261989b028d841bee5ed6cf..d0e8e0141041e95a127c3d1dbe188f6d040a5897 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 9bda8224f3d5d68c3c4e9a72b6e07b3b49f4f1d1..35e67a457182f7f90b62248d5d4044c6a14bf989 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 2bf18f1158bca1d1e7ee3d8442dd7b20f1485f77..0218d917f50906958e5b0b27d40f6fafb892979c 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 7ed7dec7fb0ed99ee7f3f374513a60ccddd41989..6cf0a9cc60cd23ea4480c86306a55de97f4ef9fc 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 057712901509911ded13b49e6b3d894b5aeb71a3..d5b1f8a912ff9fdc89dbf0a7596423358a91e435 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 2fada84c16ab23bbd7bb0f09657e074de08fadfb..f2fe78ff22cca3a36c1ae483a95cdc69a272eed5 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 a3725824449e73b0b6f626d86660ac9de8870127..cf0f2731484ec065b26e218ed8f7ad19b712b965 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 5d065b2222d370e13dd161a6b66e96590b747739..eafa324eb7a5eafcede8ee45ebfef48a58180327 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;
-}