Module Name: src
Committed By: christos
Date: Sun Jul 30 18:31:14 UTC 2023
Modified Files:
src/sys/compat/linux/common: linux_misc.c
src/sys/kern: sys_epoll.c
src/sys/sys: epoll.h
src/tests/kernel: t_epoll.c
Log Message:
Add EPOLL_CLOEXEC (Theodore Preduta)
To generate a diff of this commit:
cvs rdiff -u -r1.260 -r1.261 src/sys/compat/linux/common/linux_misc.c
cvs rdiff -u -r1.3 -r1.4 src/sys/kern/sys_epoll.c
cvs rdiff -u -r1.1 -r1.2 src/sys/sys/epoll.h
cvs rdiff -u -r1.1 -r1.2 src/tests/kernel/t_epoll.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/compat/linux/common/linux_misc.c
diff -u src/sys/compat/linux/common/linux_misc.c:1.260 src/sys/compat/linux/common/linux_misc.c:1.261
--- src/sys/compat/linux/common/linux_misc.c:1.260 Sat Jul 29 11:04:29 2023
+++ src/sys/compat/linux/common/linux_misc.c Sun Jul 30 14:31:13 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: linux_misc.c,v 1.260 2023/07/29 15:04:29 christos Exp $ */
+/* $NetBSD: linux_misc.c,v 1.261 2023/07/30 18:31:13 christos Exp $ */
/*-
* Copyright (c) 1995, 1998, 1999, 2008 The NetBSD Foundation, Inc.
@@ -57,7 +57,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.260 2023/07/29 15:04:29 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.261 2023/07/30 18:31:13 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -1725,7 +1725,7 @@ linux_sys_epoll_create1(struct lwp *l,
SCARG(&ca, flags) = 0;
if ((SCARG(uap, flags) & LINUX_O_CLOEXEC) != 0)
- SCARG(&ca, flags) |= O_CLOEXEC;
+ SCARG(&ca, flags) |= EPOLL_CLOEXEC;
return sys_epoll_create1(l, &ca, retval);
}
Index: src/sys/kern/sys_epoll.c
diff -u src/sys/kern/sys_epoll.c:1.3 src/sys/kern/sys_epoll.c:1.4
--- src/sys/kern/sys_epoll.c:1.3 Sun Jul 30 00:39:00 2023
+++ src/sys/kern/sys_epoll.c Sun Jul 30 14:31:13 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: sys_epoll.c,v 1.3 2023/07/30 04:39:00 rin Exp $ */
+/* $NetBSD: sys_epoll.c,v 1.4 2023/07/30 18:31:13 christos Exp $ */
/*-
* SPDX-License-Identifier: BSD-2-Clause
@@ -28,7 +28,7 @@
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_epoll.c,v 1.3 2023/07/30 04:39:00 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_epoll.c,v 1.4 2023/07/30 18:31:13 christos Exp $");
#include <sys/param.h>
@@ -100,10 +100,12 @@ sys_epoll_create1(struct lwp *l, const s
} */
struct sys_kqueue1_args kqa;
- if ((SCARG(uap, flags) & ~(O_CLOEXEC)) != 0)
+ if ((SCARG(uap, flags) & ~(EPOLL_CLOEXEC)) != 0)
return EINVAL;
- SCARG(&kqa, flags) = SCARG(uap, flags);
+ SCARG(&kqa, flags) = 0;
+ if (SCARG(uap, flags) & EPOLL_CLOEXEC)
+ SCARG(&kqa, flags) |= O_CLOEXEC;
return sys_kqueue1(l, &kqa, retval);
}
Index: src/sys/sys/epoll.h
diff -u src/sys/sys/epoll.h:1.1 src/sys/sys/epoll.h:1.2
--- src/sys/sys/epoll.h:1.1 Fri Jul 28 14:19:01 2023
+++ src/sys/sys/epoll.h Sun Jul 30 14:31:14 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: epoll.h,v 1.1 2023/07/28 18:19:01 christos Exp $ */
+/* $NetBSD: epoll.h,v 1.2 2023/07/30 18:31:14 christos Exp $ */
/*-
* Copyright (c) 2007 Roman Divacky
@@ -31,10 +31,13 @@
#ifndef _SYS_EPOLL_H_
#define _SYS_EPOLL_H_
+#include <sys/fcntl.h> /* for O_CLOEXEC */
#include <sys/types.h> /* for uint32_t, uint64_t */
#include <sys/sigtypes.h> /* for sigset_t */
struct timespec;
+#define EPOLL_CLOEXEC O_CLOEXEC
+
#define EPOLLIN 0x00000001
#define EPOLLPRI 0x00000002
#define EPOLLOUT 0x00000004
Index: src/tests/kernel/t_epoll.c
diff -u src/tests/kernel/t_epoll.c:1.1 src/tests/kernel/t_epoll.c:1.2
--- src/tests/kernel/t_epoll.c:1.1 Fri Jul 28 14:19:01 2023
+++ src/tests/kernel/t_epoll.c Sun Jul 30 14:31:14 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: t_epoll.c,v 1.1 2023/07/28 18:19:01 christos Exp $ */
+/* $NetBSD: t_epoll.c,v 1.2 2023/07/30 18:31:14 christos Exp $ */
/*-
* Copyright (c) 2023 The NetBSD Foundation, Inc.
@@ -29,11 +29,12 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_epoll.c,v 1.1 2023/07/28 18:19:01 christos Exp $");
+__RCSID("$NetBSD: t_epoll.c,v 1.2 2023/07/30 18:31:14 christos Exp $");
#include <sys/param.h>
#include <sys/types.h>
#include <sys/epoll.h>
+#include <sys/fcntl.h>
#include <errno.h>
#include <atf-c.h>
@@ -60,6 +61,26 @@ ATF_TC_BODY(create_size, tc)
RL(epoll_create(1));
}
+ATF_TC(create_cloexec);
+ATF_TC_HEAD(create_cloexec, tc)
+{
+
+ atf_tc_set_md_var(tc, "descr",
+ "Checks that epoll_create1 sets close on exec when desired");
+}
+ATF_TC_BODY(create_cloexec, tc)
+{
+ int fd;
+
+ RL(fd = epoll_create1(0));
+ ATF_REQUIRE_MSG((fcntl(fd, F_GETFD) & FD_CLOEXEC) == 0,
+ "Close on exec set unexpectedly.");
+
+ RL(fd = epoll_create1(EPOLL_CLOEXEC));
+ ATF_REQUIRE_MSG((fcntl(fd, F_GETFD) & FD_CLOEXEC) != 0,
+ "Close on exec was not set.");
+}
+
ATF_TC(bad_epfd);
ATF_TC_HEAD(bad_epfd, tc)
{
@@ -214,6 +235,7 @@ ATF_TC_BODY(watch_depth, tc)
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, create_size);
+ ATF_TP_ADD_TC(tp, create_cloexec);
ATF_TP_ADD_TC(tp, bad_epfd);
ATF_TP_ADD_TC(tp, bad_fd);
ATF_TP_ADD_TC(tp, not_added);