Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2e4f7c77 authored by Oleg Nesterov's avatar Oleg Nesterov
Browse files

signal: sys_sigprocmask() needs retarget_shared_pending()



sys_sigprocmask() changes current->blocked by hand. Convert this code
to use set_current_blocked().

Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
parent b013c399
Loading
Loading
Loading
Loading
+9 −13
Original line number Original line Diff line number Diff line
@@ -2900,7 +2900,7 @@ SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset,
		old_sigset_t __user *, oset)
		old_sigset_t __user *, oset)
{
{
	old_sigset_t old_set, new_set;
	old_sigset_t old_set, new_set;
	int error;
	sigset_t new_blocked;


	old_set = current->blocked.sig[0];
	old_set = current->blocked.sig[0];


@@ -2909,27 +2909,23 @@ SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset,
			return -EFAULT;
			return -EFAULT;
		new_set &= ~(sigmask(SIGKILL) | sigmask(SIGSTOP));
		new_set &= ~(sigmask(SIGKILL) | sigmask(SIGSTOP));


		error = 0;
		new_blocked = current->blocked;
		spin_lock_irq(&current->sighand->siglock);

		switch (how) {
		switch (how) {
		default:
			error = -EINVAL;
			break;
		case SIG_BLOCK:
		case SIG_BLOCK:
			sigaddsetmask(&current->blocked, new_set);
			sigaddsetmask(&new_blocked, new_set);
			break;
			break;
		case SIG_UNBLOCK:
		case SIG_UNBLOCK:
			sigdelsetmask(&current->blocked, new_set);
			sigdelsetmask(&new_blocked, new_set);
			break;
			break;
		case SIG_SETMASK:
		case SIG_SETMASK:
			current->blocked.sig[0] = new_set;
			new_blocked.sig[0] = new_set;
			break;
			break;
		default:
			return -EINVAL;
		}
		}


		recalc_sigpending();
		set_current_blocked(&new_blocked);
		spin_unlock_irq(&current->sighand->siglock);
		if (error)
			return error;
	}
	}


	if (oset) {
	if (oset) {