Esempio n. 1
0
SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask,
		size_t, sizemask, int, flags)
{
	sigset_t sigmask;

	/* Check the SFD_* constants for consistency.  */
	BUILD_BUG_ON(SFD_CLOEXEC != O_CLOEXEC);
	BUILD_BUG_ON(SFD_NONBLOCK != O_NONBLOCK);

	if (flags & ~(SFD_CLOEXEC | SFD_NONBLOCK))
		return -EINVAL;

	if (sizemask != sizeof(sigset_t) ||
	    copy_from_user(&sigmask, user_mask, sizeof(sigmask)))
		return -EINVAL;
	sigdelsetmask(&sigmask, sigmask(SIGKILL) | sigmask(SIGSTOP));
	signotset(&sigmask);

	return do_signalfd(ufd, &sigmask, flags);
}
Esempio n. 2
0
int
sys_signalfd4(struct tcb *tcp)
{
	return do_signalfd(tcp, 3);
}
Esempio n. 3
0
int
sys_signalfd(struct tcb *tcp)
{
	return do_signalfd(tcp, -1);
}