Loading arch/sparc/Kconfig +2 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ config SPARC32 select GENERIC_ATOMIC64 select CLZ_TAB select HAVE_UID16 select OLD_SIGACTION config SPARC64 def_bool 64BIT Loading Loading @@ -549,6 +550,7 @@ config COMPAT select COMPAT_BINFMT_ELF select HAVE_UID16 select ARCH_WANT_OLD_COMPAT_IPC select COMPAT_OLD_SIGACTION config SYSVIPC_COMPAT bool Loading arch/sparc/include/uapi/asm/signal.h +1 −1 Original line number Diff line number Diff line Loading @@ -160,7 +160,6 @@ struct __new_sigaction { __sigrestore_t sa_restorer; /* not used by Linux/SPARC yet */ __new_sigset_t sa_mask; }; #endif struct __old_sigaction { __sighandler_t sa_handler; Loading @@ -168,6 +167,7 @@ struct __old_sigaction { unsigned long sa_flags; void (*sa_restorer)(void); /* not used by Linux/SPARC yet */ }; #endif typedef struct sigaltstack { void __user *ss_sp; Loading arch/sparc/kernel/sys32.S +1 −1 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ SIGN1(sys32_setitimer, compat_sys_setitimer, %o0) SIGN1(sys32_getitimer, compat_sys_getitimer, %o0) SIGN1(sys32_sethostname, sys_sethostname, %o1) SIGN1(sys32_swapon, sys_swapon, %o1) SIGN1(sys32_sigaction, compat_sys_sigaction, %o0) SIGN1(sys32_sigaction, compat_sys_sparc_sigaction, %o0) SIGN1(sys32_rt_sigaction, compat_sys_rt_sigaction, %o0) SIGN1(sys32_sigprocmask, compat_sys_sigprocmask, %o0) SIGN1(sys32_rt_sigprocmask, compat_sys_rt_sigprocmask, %o0) Loading arch/sparc/kernel/sys_sparc32.c +4 −33 Original line number Diff line number Diff line Loading @@ -211,41 +211,12 @@ asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) return sys_sysfs(option, arg1, arg2); } asmlinkage long compat_sys_sigaction(int sig, struct old_sigaction32 __user *act, struct old_sigaction32 __user *oact) COMPAT_SYSCALL_DEFINE3(sparc_sigaction, int, sig, struct compat_old_sigaction __user *,act, struct compat_old_sigaction __user *,oact) { struct k_sigaction new_ka, old_ka; int ret; WARN_ON_ONCE(sig >= 0); sig = -sig; if (act) { compat_old_sigset_t mask; u32 u_handler, u_restorer; ret = get_user(u_handler, &act->sa_handler); new_ka.sa.sa_handler = compat_ptr(u_handler); ret |= __get_user(u_restorer, &act->sa_restorer); new_ka.sa.sa_restorer = compat_ptr(u_restorer); ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); ret |= __get_user(mask, &act->sa_mask); if (ret) return ret; new_ka.ka_restorer = NULL; siginitset(&new_ka.sa.sa_mask, mask); } ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); if (!ret && oact) { ret = put_user(ptr_to_compat(old_ka.sa.sa_handler), &oact->sa_handler); ret |= __put_user(ptr_to_compat(old_ka.sa.sa_restorer), &oact->sa_restorer); ret |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags); ret |= __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); } return ret; return compat_sys_sigaction(-sig, act, oact); } COMPAT_SYSCALL_DEFINE5(rt_sigaction, int, sig, Loading arch/sparc/kernel/sys_sparc_32.c +4 −33 Original line number Diff line number Diff line Loading @@ -160,41 +160,12 @@ sparc_breakpoint (struct pt_regs *regs) #endif } asmlinkage int sparc_sigaction (int sig, const struct old_sigaction __user *act, struct old_sigaction __user *oact) SYSCALL_DEFINE3(sparc_sigaction, int, sig, struct old_sigaction __user *,act, struct old_sigaction __user *,oact) { struct k_sigaction new_ka, old_ka; int ret; WARN_ON_ONCE(sig >= 0); sig = -sig; if (act) { unsigned long 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); new_ka.ka_restorer = NULL; } 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; return sys_sigaction(-sig, act, oact); } SYSCALL_DEFINE5(rt_sigaction, int, sig, Loading Loading
arch/sparc/Kconfig +2 −0 Original line number Diff line number Diff line Loading @@ -53,6 +53,7 @@ config SPARC32 select GENERIC_ATOMIC64 select CLZ_TAB select HAVE_UID16 select OLD_SIGACTION config SPARC64 def_bool 64BIT Loading Loading @@ -549,6 +550,7 @@ config COMPAT select COMPAT_BINFMT_ELF select HAVE_UID16 select ARCH_WANT_OLD_COMPAT_IPC select COMPAT_OLD_SIGACTION config SYSVIPC_COMPAT bool Loading
arch/sparc/include/uapi/asm/signal.h +1 −1 Original line number Diff line number Diff line Loading @@ -160,7 +160,6 @@ struct __new_sigaction { __sigrestore_t sa_restorer; /* not used by Linux/SPARC yet */ __new_sigset_t sa_mask; }; #endif struct __old_sigaction { __sighandler_t sa_handler; Loading @@ -168,6 +167,7 @@ struct __old_sigaction { unsigned long sa_flags; void (*sa_restorer)(void); /* not used by Linux/SPARC yet */ }; #endif typedef struct sigaltstack { void __user *ss_sp; Loading
arch/sparc/kernel/sys32.S +1 −1 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ SIGN1(sys32_setitimer, compat_sys_setitimer, %o0) SIGN1(sys32_getitimer, compat_sys_getitimer, %o0) SIGN1(sys32_sethostname, sys_sethostname, %o1) SIGN1(sys32_swapon, sys_swapon, %o1) SIGN1(sys32_sigaction, compat_sys_sigaction, %o0) SIGN1(sys32_sigaction, compat_sys_sparc_sigaction, %o0) SIGN1(sys32_rt_sigaction, compat_sys_rt_sigaction, %o0) SIGN1(sys32_sigprocmask, compat_sys_sigprocmask, %o0) SIGN1(sys32_rt_sigprocmask, compat_sys_rt_sigprocmask, %o0) Loading
arch/sparc/kernel/sys_sparc32.c +4 −33 Original line number Diff line number Diff line Loading @@ -211,41 +211,12 @@ asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) return sys_sysfs(option, arg1, arg2); } asmlinkage long compat_sys_sigaction(int sig, struct old_sigaction32 __user *act, struct old_sigaction32 __user *oact) COMPAT_SYSCALL_DEFINE3(sparc_sigaction, int, sig, struct compat_old_sigaction __user *,act, struct compat_old_sigaction __user *,oact) { struct k_sigaction new_ka, old_ka; int ret; WARN_ON_ONCE(sig >= 0); sig = -sig; if (act) { compat_old_sigset_t mask; u32 u_handler, u_restorer; ret = get_user(u_handler, &act->sa_handler); new_ka.sa.sa_handler = compat_ptr(u_handler); ret |= __get_user(u_restorer, &act->sa_restorer); new_ka.sa.sa_restorer = compat_ptr(u_restorer); ret |= __get_user(new_ka.sa.sa_flags, &act->sa_flags); ret |= __get_user(mask, &act->sa_mask); if (ret) return ret; new_ka.ka_restorer = NULL; siginitset(&new_ka.sa.sa_mask, mask); } ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); if (!ret && oact) { ret = put_user(ptr_to_compat(old_ka.sa.sa_handler), &oact->sa_handler); ret |= __put_user(ptr_to_compat(old_ka.sa.sa_restorer), &oact->sa_restorer); ret |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags); ret |= __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); } return ret; return compat_sys_sigaction(-sig, act, oact); } COMPAT_SYSCALL_DEFINE5(rt_sigaction, int, sig, Loading
arch/sparc/kernel/sys_sparc_32.c +4 −33 Original line number Diff line number Diff line Loading @@ -160,41 +160,12 @@ sparc_breakpoint (struct pt_regs *regs) #endif } asmlinkage int sparc_sigaction (int sig, const struct old_sigaction __user *act, struct old_sigaction __user *oact) SYSCALL_DEFINE3(sparc_sigaction, int, sig, struct old_sigaction __user *,act, struct old_sigaction __user *,oact) { struct k_sigaction new_ka, old_ka; int ret; WARN_ON_ONCE(sig >= 0); sig = -sig; if (act) { unsigned long 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); new_ka.ka_restorer = NULL; } 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; return sys_sigaction(-sig, act, oact); } SYSCALL_DEFINE5(rt_sigaction, int, sig, Loading