|
@@ -205,11 +205,15 @@ static const struct file_operations signalfd_fops = {
|
|
.read = signalfd_read,
|
|
.read = signalfd_read,
|
|
};
|
|
};
|
|
|
|
|
|
-asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, size_t sizemask)
|
|
|
|
|
|
+asmlinkage long sys_signalfd4(int ufd, sigset_t __user *user_mask,
|
|
|
|
+ size_t sizemask, int flags)
|
|
{
|
|
{
|
|
sigset_t sigmask;
|
|
sigset_t sigmask;
|
|
struct signalfd_ctx *ctx;
|
|
struct signalfd_ctx *ctx;
|
|
|
|
|
|
|
|
+ if (flags & ~SFD_CLOEXEC)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
if (sizemask != sizeof(sigset_t) ||
|
|
if (sizemask != sizeof(sigset_t) ||
|
|
copy_from_user(&sigmask, user_mask, sizeof(sigmask)))
|
|
copy_from_user(&sigmask, user_mask, sizeof(sigmask)))
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
@@ -228,7 +232,7 @@ asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, size_t sizemas
|
|
* anon_inode_getfd() will install the fd.
|
|
* anon_inode_getfd() will install the fd.
|
|
*/
|
|
*/
|
|
ufd = anon_inode_getfd("[signalfd]", &signalfd_fops, ctx,
|
|
ufd = anon_inode_getfd("[signalfd]", &signalfd_fops, ctx,
|
|
- 0);
|
|
|
|
|
|
+ flags & O_CLOEXEC);
|
|
if (ufd < 0)
|
|
if (ufd < 0)
|
|
kfree(ctx);
|
|
kfree(ctx);
|
|
} else {
|
|
} else {
|
|
@@ -250,3 +254,9 @@ asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, size_t sizemas
|
|
|
|
|
|
return ufd;
|
|
return ufd;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask,
|
|
|
|
+ size_t sizemask)
|
|
|
|
+{
|
|
|
|
+ return sys_signalfd4(ufd, user_mask, sizemask, 0);
|
|
|
|
+}
|