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

Commit b013c399 authored by Oleg Nesterov's avatar Oleg Nesterov
Browse files

signal: cleanup sys_sigprocmask()



Cleanup. Remove the unneeded goto's, we can simply read blocked.sig[0]
unconditionally and then copy-to-user it if oset != NULL.

Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
Acked-by: default avatarTejun Heo <tj@kernel.org>
Reviewed-by: default avatarMatt Fleming <matt.fleming@linux.intel.com>
parent 702a5073
Loading
Loading
Loading
Loading
+16 −21
Original line number Diff line number Diff line
@@ -2889,29 +2889,28 @@ SYSCALL_DEFINE1(sigpending, old_sigset_t __user *, set)
/**
 *  sys_sigprocmask - examine and change blocked signals
 *  @how: whether to add, remove, or set signals
 *  @set: signals to add or remove (if non-null)
 *  @nset: signals to add or remove (if non-null)
 *  @oset: previous value of signal mask if non-null
 *
 * Some platforms have their own version with special arguments;
 * others support only sys_rt_sigprocmask.
 */

SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, set,
SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, nset,
		old_sigset_t __user *, oset)
{
	int error;
	old_sigset_t old_set, new_set;
	int error;

	if (set) {
		error = -EFAULT;
		if (copy_from_user(&new_set, set, sizeof(*set)))
			goto out;
		new_set &= ~(sigmask(SIGKILL) | sigmask(SIGSTOP));

		spin_lock_irq(&current->sighand->siglock);
	old_set = current->blocked.sig[0];

	if (nset) {
		if (copy_from_user(&new_set, nset, sizeof(*nset)))
			return -EFAULT;
		new_set &= ~(sigmask(SIGKILL) | sigmask(SIGSTOP));

		error = 0;
		spin_lock_irq(&current->sighand->siglock);
		switch (how) {
		default:
			error = -EINVAL;
@@ -2930,19 +2929,15 @@ SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, set,
		recalc_sigpending();
		spin_unlock_irq(&current->sighand->siglock);
		if (error)
			goto out;
		if (oset)
			goto set_old;
	} else if (oset) {
		old_set = current->blocked.sig[0];
	set_old:
		error = -EFAULT;
			return error;
	}

	if (oset) {
		if (copy_to_user(oset, &old_set, sizeof(*oset)))
			goto out;
			return -EFAULT;
	}
	error = 0;
out:
	return error;

	return 0;
}
#endif /* __ARCH_WANT_SYS_SIGPROCMASK */