aboutsummaryrefslogtreecommitdiffstats
path: root/lib/libuutil
diff options
context:
space:
mode:
authorнаб <[email protected]>2021-04-08 22:17:38 +0200
committerBrian Behlendorf <[email protected]>2021-04-11 15:45:59 -0700
commit10b575d04cda376489f0102c36bb59e8edbfc186 (patch)
treec46da9a48f9199eede9b16881b7c7997c3a70d58 /lib/libuutil
parent92ffd87aafd2cf35f82acec01513e16e9ed4edd6 (diff)
lib/: set O_CLOEXEC on all fds
As found by git grep -E '(open|setmntent|pipe2?)\(' | grep -vE '((zfs|zpool)_|fd|dl|lzc_re|pidfile_|g_)open\(' FreeBSD's pidfile_open() says nothing about the flags of the files it opens, but we can't do anything about it anyway; the implementation does open all files with O_CLOEXEC Consider this output with zpool.d/media appended with "pid=$$; (ls -l /proc/$pid/fd > /dev/tty)": $ /sbin/zpool iostat -vc media lrwx------ 0 -> /dev/pts/0 l-wx------ 1 -> 'pipe:[3278500]' l-wx------ 2 -> /dev/null lrwx------ 3 -> /dev/zfs lr-x------ 4 -> /proc/31895/mounts lrwx------ 5 -> /dev/zfs lr-x------ 10 -> /usr/lib/zfs-linux/zpool.d/media vs $ ./zpool iostat -vc vendor,upath,iostat,media lrwx------ 0 -> /dev/pts/0 l-wx------ 1 -> 'pipe:[3279887]' l-wx------ 2 -> /dev/null lr-x------ 10 -> /usr/lib/zfs-linux/zpool.d/media Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Ahelenia Ziemiańska <[email protected]> Closes #11866
Diffstat (limited to 'lib/libuutil')
-rw-r--r--lib/libuutil/uu_open.c8
1 files changed, 1 insertions, 7 deletions
diff --git a/lib/libuutil/uu_open.c b/lib/libuutil/uu_open.c
index cf5c5450b..73117753c 100644
--- a/lib/libuutil/uu_open.c
+++ b/lib/libuutil/uu_open.c
@@ -36,12 +36,6 @@
#include <stdio.h>
#include <unistd.h>
-#ifdef _LP64
-#define TMPPATHFMT "%s/uu%ld"
-#else /* _LP64 */
-#define TMPPATHFMT "%s/uu%lld"
-#endif /* _LP64 */
-
/*ARGSUSED*/
int
uu_open_tmp(const char *dir, uint_t uflags)
@@ -55,7 +49,7 @@ uu_open_tmp(const char *dir, uint_t uflags)
for (;;) {
(void) snprintf(fname, PATH_MAX, "%s/uu%lld", dir, gethrtime());
- f = open(fname, O_CREAT | O_EXCL | O_RDWR, 0600);
+ f = open(fname, O_CREAT | O_EXCL | O_RDWR | O_CLOEXEC, 0600);
if (f >= 0 || errno != EEXIST)
break;