Commit 77097ae5 authored by Al Viro's avatar Al Viro

most of set_current_blocked() callers want SIGKILL/SIGSTOP removed from set

Only 3 out of 63 do not.  Renamed the current variant to __set_current_blocked(),
added set_current_blocked() that will exclude unblockable signals, switched
open-coded instances to it.
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent edd63a27
...@@ -226,7 +226,6 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs, ...@@ -226,7 +226,6 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs,
if (__get_user(set.sig[0], &sc->sc_mask)) if (__get_user(set.sig[0], &sc->sc_mask))
goto give_sigsegv; goto give_sigsegv;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(sc, regs, sw)) if (restore_sigcontext(sc, regs, sw))
...@@ -261,7 +260,6 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs, ...@@ -261,7 +260,6 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs,
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto give_sigsegv; goto give_sigsegv;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw)) if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw))
......
...@@ -22,8 +22,6 @@ ...@@ -22,8 +22,6 @@
#include "signal.h" #include "signal.h"
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* /*
* For ARM syscalls, we encode the syscall number into the instruction. * For ARM syscalls, we encode the syscall number into the instruction.
*/ */
...@@ -210,10 +208,8 @@ static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf) ...@@ -210,10 +208,8 @@ static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
int err; int err;
err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set)); err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
if (err == 0) { if (err == 0)
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
}
__get_user_error(regs->ARM_r0, &sf->uc.uc_mcontext.arm_r0, err); __get_user_error(regs->ARM_r0, &sf->uc.uc_mcontext.arm_r0, err);
__get_user_error(regs->ARM_r1, &sf->uc.uc_mcontext.arm_r1, err); __get_user_error(regs->ARM_r1, &sf->uc.uc_mcontext.arm_r1, err);
......
...@@ -22,8 +22,6 @@ ...@@ -22,8 +22,6 @@
#include <asm/ucontext.h> #include <asm/ucontext.h>
#include <asm/syscalls.h> #include <asm/syscalls.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
struct pt_regs *regs) struct pt_regs *regs)
{ {
...@@ -89,7 +87,6 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) ...@@ -89,7 +87,6 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
......
...@@ -19,8 +19,6 @@ ...@@ -19,8 +19,6 @@
#include <asm/fixed_code.h> #include <asm/fixed_code.h>
#include <asm/syscall.h> #include <asm/syscall.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* Location of the trace bit in SYSCFG. */ /* Location of the trace bit in SYSCFG. */
#define TRACE_BITS 0x0001 #define TRACE_BITS 0x0001
...@@ -98,7 +96,6 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused) ...@@ -98,7 +96,6 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (rt_restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0)) if (rt_restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0))
......
...@@ -20,8 +20,6 @@ ...@@ -20,8 +20,6 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* /*
* Do a signal return, undo the signal stack. * Do a signal return, undo the signal stack.
*/ */
...@@ -87,7 +85,6 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs) ...@@ -87,7 +85,6 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
......
...@@ -31,8 +31,6 @@ ...@@ -31,8 +31,6 @@
#define DEBUG_SIG 0 #define DEBUG_SIG 0
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* a syscall in Linux/CRIS is a break 13 instruction which is 2 bytes */ /* a syscall in Linux/CRIS is a break 13 instruction which is 2 bytes */
/* manipulate regs so that upon return, it will be re-executed */ /* manipulate regs so that upon return, it will be re-executed */
...@@ -176,7 +174,6 @@ asmlinkage int sys_sigreturn(long r10, long r11, long r12, long r13, long mof, ...@@ -176,7 +174,6 @@ asmlinkage int sys_sigreturn(long r10, long r11, long r12, long r13, long mof,
sizeof(frame->extramask)))) sizeof(frame->extramask))))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->sc)) if (restore_sigcontext(regs, &frame->sc))
...@@ -212,7 +209,6 @@ asmlinkage int sys_rt_sigreturn(long r10, long r11, long r12, long r13, ...@@ -212,7 +209,6 @@ asmlinkage int sys_rt_sigreturn(long r10, long r11, long r12, long r13,
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
......
...@@ -24,9 +24,6 @@ ...@@ -24,9 +24,6 @@
extern unsigned long cris_signal_return_page; extern unsigned long cris_signal_return_page;
/* Flag to check if a signal is blockable. */
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* /*
* A syscall in CRIS is really a "break 13" instruction, which is 2 * A syscall in CRIS is really a "break 13" instruction, which is 2
* bytes. The registers is manipulated so upon return the instruction * bytes. The registers is manipulated so upon return the instruction
...@@ -167,7 +164,6 @@ sys_sigreturn(long r10, long r11, long r12, long r13, long mof, long srp, ...@@ -167,7 +164,6 @@ sys_sigreturn(long r10, long r11, long r12, long r13, long mof, long srp,
sizeof(frame->extramask)))) sizeof(frame->extramask))))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->sc)) if (restore_sigcontext(regs, &frame->sc))
...@@ -208,7 +204,6 @@ sys_rt_sigreturn(long r10, long r11, long r12, long r13, long mof, long srp, ...@@ -208,7 +204,6 @@ sys_rt_sigreturn(long r10, long r11, long r12, long r13, long mof, long srp,
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
......
...@@ -28,8 +28,6 @@ ...@@ -28,8 +28,6 @@
#define DEBUG_SIG 0 #define DEBUG_SIG 0
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
struct fdpic_func_descriptor { struct fdpic_func_descriptor {
unsigned long text; unsigned long text;
unsigned long GOT; unsigned long GOT;
...@@ -149,7 +147,6 @@ asmlinkage int sys_sigreturn(void) ...@@ -149,7 +147,6 @@ asmlinkage int sys_sigreturn(void)
__copy_from_user(&set.sig[1], &frame->extramask, sizeof(frame->extramask))) __copy_from_user(&set.sig[1], &frame->extramask, sizeof(frame->extramask)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(&frame->sc, &gr8)) if (restore_sigcontext(&frame->sc, &gr8))
...@@ -172,7 +169,6 @@ asmlinkage int sys_rt_sigreturn(void) ...@@ -172,7 +169,6 @@ asmlinkage int sys_rt_sigreturn(void)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(&frame->uc.uc_mcontext, &gr8)) if (restore_sigcontext(&frame->uc.uc_mcontext, &gr8))
......
...@@ -47,8 +47,6 @@ ...@@ -47,8 +47,6 @@
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/ucontext.h> #include <asm/ucontext.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* /*
* Atomically swap in the new signal mask, and wait for a signal. * Atomically swap in the new signal mask, and wait for a signal.
*/ */
...@@ -186,7 +184,6 @@ asmlinkage int do_sigreturn(unsigned long __unused,...) ...@@ -186,7 +184,6 @@ asmlinkage int do_sigreturn(unsigned long __unused,...)
sizeof(frame->extramask)))) sizeof(frame->extramask))))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->sc, &er0)) if (restore_sigcontext(regs, &frame->sc, &er0))
...@@ -211,7 +208,6 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused,...) ...@@ -211,7 +208,6 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused,...)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &er0)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &er0))
......
...@@ -31,8 +31,6 @@ ...@@ -31,8 +31,6 @@
#include <asm/signal.h> #include <asm/signal.h>
#include <asm/vdso.h> #include <asm/vdso.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
struct rt_sigframe { struct rt_sigframe {
unsigned long tramp[2]; unsigned long tramp[2];
struct siginfo info; struct siginfo info;
...@@ -273,7 +271,6 @@ asmlinkage int sys_rt_sigreturn(void) ...@@ -273,7 +271,6 @@ asmlinkage int sys_rt_sigreturn(void)
if (__copy_from_user(&blocked, &frame->uc.uc_sigmask, sizeof(blocked))) if (__copy_from_user(&blocked, &frame->uc.uc_sigmask, sizeof(blocked)))
goto badframe; goto badframe;
sigdelsetmask(&blocked, ~_BLOCKABLE);
set_current_blocked(&blocked); set_current_blocked(&blocked);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#define DEBUG_SIG 0 #define DEBUG_SIG 0
#define STACK_ALIGN 16 /* minimal alignment for stack pointer */ #define STACK_ALIGN 16 /* minimal alignment for stack pointer */
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
#if _NSIG_WORDS > 1 #if _NSIG_WORDS > 1
# define PUT_SIGSET(k,u) __copy_to_user((u)->sig, (k)->sig, sizeof(sigset_t)) # define PUT_SIGSET(k,u) __copy_to_user((u)->sig, (k)->sig, sizeof(sigset_t))
...@@ -200,7 +199,6 @@ ia64_rt_sigreturn (struct sigscratch *scr) ...@@ -200,7 +199,6 @@ ia64_rt_sigreturn (struct sigscratch *scr)
if (GET_SIGSET(&set, &sc->sc_mask)) if (GET_SIGSET(&set, &sc->sc_mask))
goto give_sigsegv; goto give_sigsegv;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(sc, scr)) if (restore_sigcontext(sc, scr))
......
...@@ -28,8 +28,6 @@ ...@@ -28,8 +28,6 @@
#define DEBUG_SIG 0 #define DEBUG_SIG 0
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
asmlinkage int asmlinkage int
sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
unsigned long r2, unsigned long r3, unsigned long r4, unsigned long r2, unsigned long r3, unsigned long r4,
...@@ -111,7 +109,6 @@ sys_rt_sigreturn(unsigned long r0, unsigned long r1, ...@@ -111,7 +109,6 @@ sys_rt_sigreturn(unsigned long r0, unsigned long r1,
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &result)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &result))
......
...@@ -51,8 +51,6 @@ ...@@ -51,8 +51,6 @@
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/ucontext.h> #include <asm/ucontext.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
#ifdef CONFIG_MMU #ifdef CONFIG_MMU
/* /*
...@@ -795,7 +793,6 @@ asmlinkage int do_sigreturn(unsigned long __unused) ...@@ -795,7 +793,6 @@ asmlinkage int do_sigreturn(unsigned long __unused)
sizeof(frame->extramask)))) sizeof(frame->extramask))))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->sc, frame + 1)) if (restore_sigcontext(regs, &frame->sc, frame + 1))
...@@ -820,7 +817,6 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused) ...@@ -820,7 +817,6 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (rt_restore_ucontext(regs, sw, &frame->uc)) if (rt_restore_ucontext(regs, sw, &frame->uc))
......
...@@ -41,8 +41,6 @@ ...@@ -41,8 +41,6 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/syscalls.h> #include <asm/syscalls.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
asmlinkage long asmlinkage long
sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss,
struct pt_regs *regs) struct pt_regs *regs)
...@@ -106,7 +104,6 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs) ...@@ -106,7 +104,6 @@ asmlinkage long sys_rt_sigreturn(struct pt_regs *regs)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &rval)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &rval))
......
...@@ -19,8 +19,6 @@ ...@@ -19,8 +19,6 @@
# define DEBUGP(fmt, args...) # define DEBUGP(fmt, args...)
#endif #endif
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* /*
* Determine which stack to use.. * Determine which stack to use..
*/ */
......
...@@ -339,7 +339,6 @@ asmlinkage void sys_sigreturn(nabi_no_regargs struct pt_regs regs) ...@@ -339,7 +339,6 @@ asmlinkage void sys_sigreturn(nabi_no_regargs struct pt_regs regs)
if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked))) if (__copy_from_user(&blocked, &frame->sf_mask, sizeof(blocked)))
goto badframe; goto badframe;
sigdelsetmask(&blocked, ~_BLOCKABLE);
set_current_blocked(&blocked); set_current_blocked(&blocked);
sig = restore_sigcontext(&regs, &frame->sf_sc); sig = restore_sigcontext(&regs, &frame->sf_sc);
...@@ -375,7 +374,6 @@ asmlinkage void sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs) ...@@ -375,7 +374,6 @@ asmlinkage void sys_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
sig = restore_sigcontext(&regs, &frame->rs_uc.uc_mcontext); sig = restore_sigcontext(&regs, &frame->rs_uc.uc_mcontext);
......
...@@ -465,7 +465,6 @@ asmlinkage void sys32_sigreturn(nabi_no_regargs struct pt_regs regs) ...@@ -465,7 +465,6 @@ asmlinkage void sys32_sigreturn(nabi_no_regargs struct pt_regs regs)
if (__copy_conv_sigset_from_user(&blocked, &frame->sf_mask)) if (__copy_conv_sigset_from_user(&blocked, &frame->sf_mask))
goto badframe; goto badframe;
sigdelsetmask(&blocked, ~_BLOCKABLE);
set_current_blocked(&blocked); set_current_blocked(&blocked);
sig = restore_sigcontext32(&regs, &frame->sf_sc); sig = restore_sigcontext32(&regs, &frame->sf_sc);
...@@ -503,7 +502,6 @@ asmlinkage void sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) ...@@ -503,7 +502,6 @@ asmlinkage void sys32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
if (__copy_conv_sigset_from_user(&set, &frame->rs_uc.uc_sigmask)) if (__copy_conv_sigset_from_user(&set, &frame->rs_uc.uc_sigmask))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
sig = restore_sigcontext32(&regs, &frame->rs_uc.uc_mcontext); sig = restore_sigcontext32(&regs, &frame->rs_uc.uc_mcontext);
......
...@@ -109,7 +109,6 @@ asmlinkage void sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs) ...@@ -109,7 +109,6 @@ asmlinkage void sysn32_rt_sigreturn(nabi_no_regargs struct pt_regs regs)
if (__copy_conv_sigset_from_user(&set, &frame->rs_uc.uc_sigmask)) if (__copy_conv_sigset_from_user(&set, &frame->rs_uc.uc_sigmask))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
sig = restore_sigcontext(&regs, &frame->rs_uc.uc_mcontext); sig = restore_sigcontext(&regs, &frame->rs_uc.uc_mcontext);
......
...@@ -31,8 +31,6 @@ ...@@ -31,8 +31,6 @@
#define DEBUG_SIG 0 #define DEBUG_SIG 0
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* /*
* atomically swap in the new signal mask, and wait for a signal. * atomically swap in the new signal mask, and wait for a signal.
*/ */
...@@ -163,7 +161,6 @@ asmlinkage long sys_sigreturn(void) ...@@ -163,7 +161,6 @@ asmlinkage long sys_sigreturn(void)
sizeof(frame->extramask))) sizeof(frame->extramask)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(current_frame(), &frame->sc, &d0)) if (restore_sigcontext(current_frame(), &frame->sc, &d0))
...@@ -191,7 +188,6 @@ asmlinkage long sys_rt_sigreturn(void) ...@@ -191,7 +188,6 @@ asmlinkage long sys_rt_sigreturn(void)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(current_frame(), &frame->uc.uc_mcontext, &d0)) if (restore_sigcontext(current_frame(), &frame->uc.uc_mcontext, &d0))
......
...@@ -33,8 +33,6 @@ ...@@ -33,8 +33,6 @@
#define DEBUG_SIG 0 #define DEBUG_SIG 0
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
asmlinkage long asmlinkage long
_sys_sigaltstack(const stack_t *uss, stack_t *uoss, struct pt_regs *regs) _sys_sigaltstack(const stack_t *uss, stack_t *uoss, struct pt_regs *regs)
{ {
...@@ -101,7 +99,6 @@ asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs) ...@@ -101,7 +99,6 @@ asmlinkage long _sys_rt_sigreturn(struct pt_regs *regs)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
......
...@@ -48,9 +48,6 @@ ...@@ -48,9 +48,6 @@
#define DBG(LEVEL, ...) #define DBG(LEVEL, ...)
#endif #endif
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* gcc will complain if a pointer is cast to an integer of different /* gcc will complain if a pointer is cast to an integer of different
* size. If you really need to do this (and we do for an ELF32 user * size. If you really need to do this (and we do for an ELF32 user
* application in an ELF64 kernel) then you have to do a cast to an * application in an ELF64 kernel) then you have to do a cast to an
...@@ -131,7 +128,6 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall) ...@@ -131,7 +128,6 @@ sys_rt_sigreturn(struct pt_regs *regs, int in_syscall)
goto give_sigsegv; goto give_sigsegv;
} }
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
/* Good thing we saved the old gr[30], eh? */ /* Good thing we saved the old gr[30], eh? */
......
...@@ -47,8 +47,6 @@ ...@@ -47,8 +47,6 @@
#define DBG(LEVEL, ...) #define DBG(LEVEL, ...)
#endif #endif
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
inline void inline void
sigset_32to64(sigset_t *s64, compat_sigset_t *s32) sigset_32to64(sigset_t *s64, compat_sigset_t *s32)
{ {
......
...@@ -57,7 +57,6 @@ void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, ...@@ -57,7 +57,6 @@ void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
*/ */
void restore_sigmask(sigset_t *set) void restore_sigmask(sigset_t *set)
{ {
sigdelsetmask(set, ~_BLOCKABLE);
set_current_blocked(set); set_current_blocked(set);
} }
......
...@@ -10,8 +10,6 @@ ...@@ -10,8 +10,6 @@
#ifndef _POWERPC_ARCH_SIGNAL_H #ifndef _POWERPC_ARCH_SIGNAL_H
#define _POWERPC_ARCH_SIGNAL_H #define _POWERPC_ARCH_SIGNAL_H
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
extern void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags); extern void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags);
extern void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, extern void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs *regs,
......
...@@ -32,8 +32,6 @@ ...@@ -32,8 +32,6 @@
#include "compat_ptrace.h" #include "compat_ptrace.h"
#include "entry.h" #include "entry.h"
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
typedef struct typedef struct
{ {
__u8 callee_used_stack[__SIGNAL_FRAMESIZE32]; __u8 callee_used_stack[__SIGNAL_FRAMESIZE32];
...@@ -364,7 +362,6 @@ asmlinkage long sys32_sigreturn(void) ...@@ -364,7 +362,6 @@ asmlinkage long sys32_sigreturn(void)
goto badframe; goto badframe;
if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32)) if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigregs32(regs, &frame->sregs)) if (restore_sigregs32(regs, &frame->sregs))
goto badframe; goto badframe;
...@@ -390,7 +387,6 @@ asmlinkage long sys32_rt_sigreturn(void) ...@@ -390,7 +387,6 @@ asmlinkage long sys32_rt_sigreturn(void)
goto badframe; goto badframe;
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigregs32(regs, &frame->uc.uc_mcontext)) if (restore_sigregs32(regs, &frame->uc.uc_mcontext))
goto badframe; goto badframe;
......
...@@ -33,9 +33,6 @@ ...@@ -33,9 +33,6 @@
#include <asm/switch_to.h> #include <asm/switch_to.h>
#include "entry.h" #include "entry.h"
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
typedef struct typedef struct
{ {
__u8 callee_used_stack[__SIGNAL_FRAMESIZE]; __u8 callee_used_stack[__SIGNAL_FRAMESIZE];
...@@ -169,7 +166,6 @@ SYSCALL_DEFINE0(sigreturn) ...@@ -169,7 +166,6 @@ SYSCALL_DEFINE0(sigreturn)
goto badframe; goto badframe;
if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE)) if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigregs(regs, &frame->sregs)) if (restore_sigregs(regs, &frame->sregs))
goto badframe; goto badframe;
...@@ -189,7 +185,6 @@ SYSCALL_DEFINE0(rt_sigreturn) ...@@ -189,7 +185,6 @@ SYSCALL_DEFINE0(rt_sigreturn)
goto badframe; goto badframe;
if (__copy_from_user(&set.sig, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set.sig, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigregs(regs, &frame->uc.uc_mcontext)) if (restore_sigregs(regs, &frame->uc.uc_mcontext))
goto badframe; goto badframe;
......
...@@ -34,8 +34,6 @@ ...@@ -34,8 +34,6 @@
#include <asm/syscalls.h> #include <asm/syscalls.h>
#include <asm/ucontext.h> #include <asm/ucontext.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
struct rt_sigframe { struct rt_sigframe {
u32 rs_ass[4]; /* argument save space */ u32 rs_ass[4]; /* argument save space */
u32 rs_code[2]; /* signal trampoline */ u32 rs_code[2]; /* signal trampoline */
...@@ -162,7 +160,6 @@ score_rt_sigreturn(struct pt_regs *regs) ...@@ -162,7 +160,6 @@ score_rt_sigreturn(struct pt_regs *regs)
if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->rs_uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
sig = restore_sigcontext(regs, &frame->rs_uc.uc_mcontext); sig = restore_sigcontext(regs, &frame->rs_uc.uc_mcontext);
......
...@@ -32,8 +32,6 @@ ...@@ -32,8 +32,6 @@
#include <asm/syscalls.h> #include <asm/syscalls.h>
#include <asm/fpu.h> #include <asm/fpu.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
struct fdpic_func_descriptor { struct fdpic_func_descriptor {
unsigned long text; unsigned long text;
unsigned long GOT; unsigned long GOT;
...@@ -226,7 +224,6 @@ asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5, ...@@ -226,7 +224,6 @@ asmlinkage int sys_sigreturn(unsigned long r4, unsigned long r5,
sizeof(frame->extramask)))) sizeof(frame->extramask))))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->sc, &r0)) if (restore_sigcontext(regs, &frame->sc, &r0))
...@@ -256,7 +253,6 @@ asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5, ...@@ -256,7 +253,6 @@ asmlinkage int sys_rt_sigreturn(unsigned long r4, unsigned long r5,
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0))
......
...@@ -41,8 +41,6 @@ ...@@ -41,8 +41,6 @@
#define DEBUG_SIG 0 #define DEBUG_SIG 0
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
static void static void
handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka, handle_signal(unsigned long sig, siginfo_t *info, struct k_sigaction *ka,
struct pt_regs * regs); struct pt_regs * regs);
...@@ -330,7 +328,6 @@ asmlinkage int sys_sigreturn(unsigned long r2, unsigned long r3, ...@@ -330,7 +328,6 @@ asmlinkage int sys_sigreturn(unsigned long r2, unsigned long r3,
sizeof(frame->extramask)))) sizeof(frame->extramask))))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->sc, &ret)) if (restore_sigcontext(regs, &frame->sc, &ret))
...@@ -363,7 +360,6 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3, ...@@ -363,7 +360,6 @@ asmlinkage int sys_rt_sigreturn(unsigned long r2, unsigned long r3,
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ret)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ret))
......
...@@ -32,8 +32,6 @@ ...@@ -32,8 +32,6 @@
#include "sigutil.h" #include "sigutil.h"
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* This magic should be in g_upper[0] for all upper parts /* This magic should be in g_upper[0] for all upper parts
* to be valid. * to be valid.
*/ */
...@@ -274,7 +272,6 @@ void do_sigreturn32(struct pt_regs *regs) ...@@ -274,7 +272,6 @@ void do_sigreturn32(struct pt_regs *regs)
case 2: set.sig[1] = seta[2] + (((long)seta[3]) << 32); case 2: set.sig[1] = seta[2] + (((long)seta[3]) << 32);
case 1: set.sig[0] = seta[0] + (((long)seta[1]) << 32); case 1: set.sig[0] = seta[0] + (((long)seta[1]) << 32);
} }
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
return; return;
...@@ -376,7 +373,6 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs) ...@@ -376,7 +373,6 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs)
case 2: set.sig[1] = seta.sig[2] + (((long)seta.sig[3]) << 32); case 2: set.sig[1] = seta.sig[2] + (((long)seta.sig[3]) << 32);
case 1: set.sig[0] = seta.sig[0] + (((long)seta.sig[1]) << 32); case 1: set.sig[0] = seta.sig[0] + (((long)seta.sig[1]) << 32);
} }
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
return; return;
segv: segv:
......
...@@ -29,8 +29,6 @@ ...@@ -29,8 +29,6 @@
#include "sigutil.h" #include "sigutil.h"
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
extern void fpsave(unsigned long *fpregs, unsigned long *fsr, extern void fpsave(unsigned long *fpregs, unsigned long *fsr,
void *fpqueue, unsigned long *fpqdepth); void *fpqueue, unsigned long *fpqdepth);
extern void fpload(unsigned long *fpregs, unsigned long *fsr); extern void fpload(unsigned long *fpregs, unsigned long *fsr);
...@@ -130,7 +128,6 @@ asmlinkage void do_sigreturn(struct pt_regs *regs) ...@@ -130,7 +128,6 @@ asmlinkage void do_sigreturn(struct pt_regs *regs)
if (err) if (err)
goto segv_and_exit; goto segv_and_exit;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
return; return;
...@@ -197,7 +194,6 @@ asmlinkage void do_rt_sigreturn(struct pt_regs *regs) ...@@ -197,7 +194,6 @@ asmlinkage void do_rt_sigreturn(struct pt_regs *regs)
goto segv; goto segv;
} }
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
return; return;
segv: segv:
......
...@@ -38,8 +38,6 @@ ...@@ -38,8 +38,6 @@
#include "systbls.h" #include "systbls.h"
#include "sigutil.h" #include "sigutil.h"
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* {set, get}context() needed for 64-bit SparcLinux userland. */ /* {set, get}context() needed for 64-bit SparcLinux userland. */
asmlinkage void sparc64_set_context(struct pt_regs *regs) asmlinkage void sparc64_set_context(struct pt_regs *regs)
{ {
...@@ -71,7 +69,6 @@ asmlinkage void sparc64_set_context(struct pt_regs *regs) ...@@ -71,7 +69,6 @@ asmlinkage void sparc64_set_context(struct pt_regs *regs)
if (__copy_from_user(&set, &ucp->uc_sigmask, sizeof(sigset_t))) if (__copy_from_user(&set, &ucp->uc_sigmask, sizeof(sigset_t)))
goto do_sigsegv; goto do_sigsegv;
} }
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
} }
if (test_thread_flag(TIF_32BIT)) { if (test_thread_flag(TIF_32BIT)) {
...@@ -315,7 +312,6 @@ void do_rt_sigreturn(struct pt_regs *regs) ...@@ -315,7 +312,6 @@ void do_rt_sigreturn(struct pt_regs *regs)
/* Prevent syscall restart. */ /* Prevent syscall restart. */
pt_regs_clear_syscall(regs); pt_regs_clear_syscall(regs);
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
return; return;
segv: segv:
......
...@@ -118,8 +118,6 @@ struct compat_rt_sigframe { ...@@ -118,8 +118,6 @@ struct compat_rt_sigframe {
struct compat_ucontext uc; struct compat_ucontext uc;
}; };
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
long compat_sys_rt_sigaction(int sig, struct compat_sigaction __user *act, long compat_sys_rt_sigaction(int sig, struct compat_sigaction __user *act,
struct compat_sigaction __user *oact, struct compat_sigaction __user *oact,
size_t sigsetsize) size_t sigsetsize)
...@@ -302,7 +300,6 @@ long compat_sys_rt_sigreturn(struct pt_regs *regs) ...@@ -302,7 +300,6 @@ long compat_sys_rt_sigreturn(struct pt_regs *regs)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
......
...@@ -37,8 +37,6 @@ ...@@ -37,8 +37,6 @@
#define DEBUG_SIG 0 #define DEBUG_SIG 0
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
SYSCALL_DEFINE3(sigaltstack, const stack_t __user *, uss, SYSCALL_DEFINE3(sigaltstack, const stack_t __user *, uss,
stack_t __user *, uoss, struct pt_regs *, regs) stack_t __user *, uoss, struct pt_regs *, regs)
{ {
...@@ -96,7 +94,6 @@ SYSCALL_DEFINE1(rt_sigreturn, struct pt_regs *, regs) ...@@ -96,7 +94,6 @@ SYSCALL_DEFINE1(rt_sigreturn, struct pt_regs *, regs)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
......
...@@ -6,9 +6,6 @@ ...@@ -6,9 +6,6 @@
#ifndef __FRAME_KERN_H_ #ifndef __FRAME_KERN_H_
#define __FRAME_KERN_H_ #define __FRAME_KERN_H_
#define _S(nr) (1<<((nr)-1))
#define _BLOCKABLE (~(_S(SIGKILL) | _S(SIGSTOP)))
extern int setup_signal_stack_sc(unsigned long stack_top, int sig, extern int setup_signal_stack_sc(unsigned long stack_top, int sig,
struct k_sigaction *ka, struct k_sigaction *ka,
struct pt_regs *regs, struct pt_regs *regs,
......
...@@ -15,10 +15,6 @@ ...@@ -15,10 +15,6 @@
EXPORT_SYMBOL(block_signals); EXPORT_SYMBOL(block_signals);
EXPORT_SYMBOL(unblock_signals); EXPORT_SYMBOL(unblock_signals);
#define _S(nr) (1<<((nr)-1))
#define _BLOCKABLE (~(_S(SIGKILL) | _S(SIGSTOP)))
/* /*
* OK, we're invoking a handler * OK, we're invoking a handler
*/ */
......
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/ucontext.h> #include <asm/ucontext.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
/* /*
* For UniCore syscalls, we encode the syscall number into the instruction. * For UniCore syscalls, we encode the syscall number into the instruction.
*/ */
...@@ -61,10 +59,8 @@ static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf) ...@@ -61,10 +59,8 @@ static int restore_sigframe(struct pt_regs *regs, struct sigframe __user *sf)
int err; int err;
err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set)); err = __copy_from_user(&set, &sf->uc.uc_sigmask, sizeof(set));
if (err == 0) { if (err == 0)
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
}
err |= __get_user(regs->UCreg_00, &sf->uc.uc_mcontext.regs.UCreg_00); err |= __get_user(regs->UCreg_00, &sf->uc.uc_mcontext.regs.UCreg_00);
err |= __get_user(regs->UCreg_01, &sf->uc.uc_mcontext.regs.UCreg_01); err |= __get_user(regs->UCreg_01, &sf->uc.uc_mcontext.regs.UCreg_01);
......
...@@ -273,7 +273,6 @@ asmlinkage long sys32_sigreturn(struct pt_regs *regs) ...@@ -273,7 +273,6 @@ asmlinkage long sys32_sigreturn(struct pt_regs *regs)
sizeof(frame->extramask)))) sizeof(frame->extramask))))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (ia32_restore_sigcontext(regs, &frame->sc, &ax)) if (ia32_restore_sigcontext(regs, &frame->sc, &ax))
...@@ -299,7 +298,6 @@ asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs) ...@@ -299,7 +298,6 @@ asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (ia32_restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax)) if (ia32_restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
......
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
#include <asm/processor-flags.h> #include <asm/processor-flags.h>
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
#define __FIX_EFLAGS (X86_EFLAGS_AC | X86_EFLAGS_OF | \ #define __FIX_EFLAGS (X86_EFLAGS_AC | X86_EFLAGS_OF | \
X86_EFLAGS_DF | X86_EFLAGS_TF | X86_EFLAGS_SF | \ X86_EFLAGS_DF | X86_EFLAGS_TF | X86_EFLAGS_SF | \
X86_EFLAGS_ZF | X86_EFLAGS_AF | X86_EFLAGS_PF | \ X86_EFLAGS_ZF | X86_EFLAGS_AF | X86_EFLAGS_PF | \
......
...@@ -555,7 +555,6 @@ unsigned long sys_sigreturn(struct pt_regs *regs) ...@@ -555,7 +555,6 @@ unsigned long sys_sigreturn(struct pt_regs *regs)
sizeof(frame->extramask)))) sizeof(frame->extramask))))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->sc, &ax)) if (restore_sigcontext(regs, &frame->sc, &ax))
...@@ -581,7 +580,6 @@ long sys_rt_sigreturn(struct pt_regs *regs) ...@@ -581,7 +580,6 @@ long sys_rt_sigreturn(struct pt_regs *regs)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
...@@ -915,7 +913,6 @@ asmlinkage long sys32_x32_rt_sigreturn(struct pt_regs *regs) ...@@ -915,7 +913,6 @@ asmlinkage long sys32_x32_rt_sigreturn(struct pt_regs *regs)
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax)) if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &ax))
......
...@@ -486,7 +486,6 @@ long sys_sigreturn(struct pt_regs *regs) ...@@ -486,7 +486,6 @@ long sys_sigreturn(struct pt_regs *regs)
copy_from_user(&set.sig[1], extramask, sig_size)) copy_from_user(&set.sig[1], extramask, sig_size))
goto segfault; goto segfault;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (copy_sc_from_user(&current->thread.regs, sc)) if (copy_sc_from_user(&current->thread.regs, sc))
...@@ -600,7 +599,6 @@ long sys_rt_sigreturn(struct pt_regs *regs) ...@@ -600,7 +599,6 @@ long sys_rt_sigreturn(struct pt_regs *regs)
if (copy_from_user(&set, &uc->uc_sigmask, sizeof(set))) if (copy_from_user(&set, &uc->uc_sigmask, sizeof(set)))
goto segfault; goto segfault;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (copy_sc_from_user(&current->thread.regs, &uc->uc_mcontext)) if (copy_sc_from_user(&current->thread.regs, &uc->uc_mcontext))
......
...@@ -30,8 +30,6 @@ ...@@ -30,8 +30,6 @@
#define DEBUG_SIG 0 #define DEBUG_SIG 0
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
extern struct task_struct *coproc_owners[]; extern struct task_struct *coproc_owners[];
struct rt_sigframe struct rt_sigframe
...@@ -261,7 +259,6 @@ asmlinkage long xtensa_rt_sigreturn(long a0, long a1, long a2, long a3, ...@@ -261,7 +259,6 @@ asmlinkage long xtensa_rt_sigreturn(long a0, long a1, long a2, long a3,
if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
goto badframe; goto badframe;
sigdelsetmask(&set, ~_BLOCKABLE);
set_current_blocked(&set); set_current_blocked(&set);
if (restore_sigcontext(regs, frame)) if (restore_sigcontext(regs, frame))
......
...@@ -2210,7 +2210,7 @@ extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned lon ...@@ -2210,7 +2210,7 @@ extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned lon
static inline void restore_saved_sigmask(void) static inline void restore_saved_sigmask(void)
{ {
if (test_and_clear_restore_sigmask()) if (test_and_clear_restore_sigmask())
set_current_blocked(&current->saved_sigmask); __set_current_blocked(&current->saved_sigmask);
} }
static inline sigset_t *sigmask_to_save(void) static inline sigset_t *sigmask_to_save(void)
......
...@@ -250,7 +250,8 @@ extern long do_sigpending(void __user *, unsigned long); ...@@ -250,7 +250,8 @@ extern long do_sigpending(void __user *, unsigned long);
extern int do_sigtimedwait(const sigset_t *, siginfo_t *, extern int do_sigtimedwait(const sigset_t *, siginfo_t *,
const struct timespec *); const struct timespec *);
extern int sigprocmask(int, sigset_t *, sigset_t *); extern int sigprocmask(int, sigset_t *, sigset_t *);
extern void set_current_blocked(const sigset_t *); extern void set_current_blocked(sigset_t *);
extern void __set_current_blocked(const sigset_t *);
extern int show_unhandled_signals; extern int show_unhandled_signals;
extern int sigsuspend(sigset_t *); extern int sigsuspend(sigset_t *);
......
...@@ -2524,7 +2524,16 @@ static void __set_task_blocked(struct task_struct *tsk, const sigset_t *newset) ...@@ -2524,7 +2524,16 @@ static void __set_task_blocked(struct task_struct *tsk, const sigset_t *newset)
* It is wrong to change ->blocked directly, this helper should be used * It is wrong to change ->blocked directly, this helper should be used
* to ensure the process can't miss a shared signal we are going to block. * to ensure the process can't miss a shared signal we are going to block.
*/ */
void set_current_blocked(const sigset_t *newset) void set_current_blocked(sigset_t *newset)
{
struct task_struct *tsk = current;
sigdelsetmask(newset, sigmask(SIGKILL) | sigmask(SIGSTOP));
spin_lock_irq(&tsk->sighand->siglock);
__set_task_blocked(tsk, newset);
spin_unlock_irq(&tsk->sighand->siglock);
}
void __set_current_blocked(const sigset_t *newset)
{ {
struct task_struct *tsk = current; struct task_struct *tsk = current;
...@@ -2564,7 +2573,7 @@ int sigprocmask(int how, sigset_t *set, sigset_t *oldset) ...@@ -2564,7 +2573,7 @@ int sigprocmask(int how, sigset_t *set, sigset_t *oldset)
return -EINVAL; return -EINVAL;
} }
set_current_blocked(&newset); __set_current_blocked(&newset);
return 0; return 0;
} }
...@@ -3138,7 +3147,7 @@ SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset, ...@@ -3138,7 +3147,7 @@ SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset,
return -EINVAL; return -EINVAL;
} }
set_current_blocked(&new_blocked); __set_current_blocked(&new_blocked);
} }
if (oset) { if (oset) {
...@@ -3202,7 +3211,6 @@ SYSCALL_DEFINE1(ssetmask, int, newmask) ...@@ -3202,7 +3211,6 @@ SYSCALL_DEFINE1(ssetmask, int, newmask)
int old = current->blocked.sig[0]; int old = current->blocked.sig[0];
sigset_t newset; sigset_t newset;
siginitset(&newset, newmask & ~(sigmask(SIGKILL) | sigmask(SIGSTOP)));
set_current_blocked(&newset); set_current_blocked(&newset);
return old; return old;
...@@ -3243,8 +3251,6 @@ SYSCALL_DEFINE0(pause) ...@@ -3243,8 +3251,6 @@ SYSCALL_DEFINE0(pause)
int sigsuspend(sigset_t *set) int sigsuspend(sigset_t *set)
{ {
sigdelsetmask(set, sigmask(SIGKILL)|sigmask(SIGSTOP));
current->saved_sigmask = current->blocked; current->saved_sigmask = current->blocked;
set_current_blocked(set); set_current_blocked(set);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment