[PATCH xserver 1/2] shm, xwayland: prefer atomic close-on-exec without O_TMPFILE

Jan Beich jbeich at FreeBSD.org
Fri Jul 7 14:31:48 UTC 2017


Signed-off-by: Jan Beich <jbeich at FreeBSD.org>
---
 Xext/shm.c              | 9 +++++++--
 configure.ac            | 2 +-
 include/dix-config.h.in | 3 +++
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/Xext/shm.c b/Xext/shm.c
index 91ea90b14..6edeba6fb 100644
--- a/Xext/shm.c
+++ b/Xext/shm.c
@@ -1199,7 +1199,6 @@ shm_tmpfile(void)
 {
 #ifdef SHMDIR
 	int	fd;
-	int	flags;
 	char	template[] = SHMDIR "/shmfd-XXXXXX";
 #ifdef O_TMPFILE
 	fd = open(SHMDIR, O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666);
@@ -1209,15 +1208,21 @@ shm_tmpfile(void)
 	}
 	ErrorF ("Not using O_TMPFILE\n");
 #endif
+#ifdef HAVE_MKOSTEMP
+	fd = mkostemp(template, O_CLOEXEC);
+#else
 	fd = mkstemp(template);
+#endif
 	if (fd < 0)
 		return -1;
 	unlink(template);
-	flags = fcntl(fd, F_GETFD);
+#ifndef HAVE_MKOSTEMP
+	int flags = fcntl(fd, F_GETFD);
 	if (flags != -1) {
 		flags |= FD_CLOEXEC;
 		(void) fcntl(fd, F_SETFD, &flags);
 	}
+#endif
 	return fd;
 #else
         return -1;
diff --git a/configure.ac b/configure.ac
index e202770c1..a795ecf1e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -157,7 +157,7 @@ dnl Checks for library functions.
 AC_CHECK_FUNCS([backtrace ffs geteuid getuid issetugid getresuid \
 	getdtablesize getifaddrs getpeereid getpeerucred getprogname getzoneid \
 	mmap posix_fallocate seteuid shmctl64 strncasecmp vasprintf vsnprintf \
-	walkcontext setitimer poll epoll_create1])
+	walkcontext setitimer poll epoll_create1 mkostemp])
 AC_CONFIG_LIBOBJ_DIR([os])
 AC_REPLACE_FUNCS([reallocarray strcasecmp strcasestr strlcat strlcpy strndup\
 	timingsafe_memcmp])
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index ad1ab20a6..367d75c27 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -140,6 +140,9 @@
 /* Define to 1 if you have the <linux/fb.h> header file. */
 #undef HAVE_LINUX_FB_H
 
+/* Define to 1 if you have the `mkostemp' function. */
+#undef HAVE_MKOSTEMP
+
 /* Define to 1 if you have the `mmap' function. */
 #undef HAVE_MMAP
 


More information about the xorg-devel mailing list