|
@@ -198,11 +198,14 @@ struct file *eventfd_fget(int fd)
|
|
|
return file;
|
|
|
}
|
|
|
|
|
|
-asmlinkage long sys_eventfd(unsigned int count)
|
|
|
+asmlinkage long sys_eventfd2(unsigned int count, int flags)
|
|
|
{
|
|
|
int fd;
|
|
|
struct eventfd_ctx *ctx;
|
|
|
|
|
|
+ if (flags & ~EFD_CLOEXEC)
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
|
|
|
if (!ctx)
|
|
|
return -ENOMEM;
|
|
@@ -214,9 +217,15 @@ asmlinkage long sys_eventfd(unsigned int count)
|
|
|
* When we call this, the initialization must be complete, since
|
|
|
* anon_inode_getfd() will install the fd.
|
|
|
*/
|
|
|
- fd = anon_inode_getfd("[eventfd]", &eventfd_fops, ctx, 0);
|
|
|
+ fd = anon_inode_getfd("[eventfd]", &eventfd_fops, ctx,
|
|
|
+ flags & O_CLOEXEC);
|
|
|
if (fd < 0)
|
|
|
kfree(ctx);
|
|
|
return fd;
|
|
|
}
|
|
|
|
|
|
+asmlinkage long sys_eventfd(unsigned int count)
|
|
|
+{
|
|
|
+ return sys_eventfd2(count, 0);
|
|
|
+}
|
|
|
+
|