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);

Reply via email to