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

Commit d53238cd authored by Dominik Brodowski's avatar Dominik Brodowski
Browse files

kernel: open-code sys_rt_sigpending() in sys_sigpending()

A similar but not fully equivalent code path is already open-coded
three times (in sys_rt_sigpending and in the two compat stubs), so
do it a fourth time here.

This patch is part of a series which removes in-kernel calls to syscalls.
On this basis, the syscall entry path can be streamlined. For details, see
http://lkml.kernel.org/r/20180325162527.GA17492@light.dominikbrodowski.net



Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
parent d300b610
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -288,7 +288,7 @@ asmlinkage long sys_capset(cap_user_header_t header,
				const cap_user_data_t data);
asmlinkage long sys_personality(unsigned int personality);

asmlinkage long sys_sigpending(old_sigset_t __user *set);
asmlinkage long sys_sigpending(old_sigset_t __user *uset);
asmlinkage long sys_sigprocmask(int how, old_sigset_t __user *set,
				old_sigset_t __user *oset);
asmlinkage long sys_sigaltstack(const struct sigaltstack __user *uss,
+12 −3
Original line number Diff line number Diff line
@@ -3629,11 +3629,20 @@ int __compat_save_altstack(compat_stack_t __user *uss, unsigned long sp)

/**
 *  sys_sigpending - examine pending signals
 *  @set: where mask of pending signal is returned
 *  @uset: where mask of pending signal is returned
 */
SYSCALL_DEFINE1(sigpending, old_sigset_t __user *, set)
SYSCALL_DEFINE1(sigpending, old_sigset_t __user *, uset)
{
	return sys_rt_sigpending((sigset_t __user *)set, sizeof(old_sigset_t)); 
	sigset_t set;
	int err;

	if (sizeof(old_sigset_t) > sizeof(*uset))
		return -EINVAL;

	err = do_sigpending(&set);
	if (!err && copy_to_user(uset, &set, sizeof(old_sigset_t)))
		err = -EFAULT;
	return err;
}

#ifdef CONFIG_COMPAT