diff options
Diffstat (limited to 'kernel/signal.c')
| -rw-r--r-- | kernel/signal.c | 9 | 
1 files changed, 3 insertions, 6 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 7aaa51d8e5b..372771e948c 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -2528,11 +2528,8 @@ static void __set_task_blocked(struct task_struct *tsk, 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); +	__set_current_blocked(newset);  }  void __set_current_blocked(const sigset_t *newset) @@ -3204,7 +3201,6 @@ SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset,  	if (nset) {  		if (copy_from_user(&new_set, nset, sizeof(*nset)))  			return -EFAULT; -		new_set &= ~(sigmask(SIGKILL) | sigmask(SIGSTOP));  		new_blocked = current->blocked; @@ -3222,7 +3218,7 @@ SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset,  			return -EINVAL;  		} -		__set_current_blocked(&new_blocked); +		set_current_blocked(&new_blocked);  	}  	if (oset) { @@ -3286,6 +3282,7 @@ SYSCALL_DEFINE1(ssetmask, int, newmask)  	int old = current->blocked.sig[0];  	sigset_t newset; +	siginitset(&newset, newmask);  	set_current_blocked(&newset);  	return old;  |