summaryrefslogtreecommitdiffstats
path: root/lib/libzpool
diff options
context:
space:
mode:
authorнаб <[email protected]>2021-04-08 22:17:38 +0200
committerBrian Behlendorf <[email protected]>2021-04-14 13:23:07 -0700
commit2453d0263d1c2169c0f2671b900dde976745af20 (patch)
treee37a8848718c0381c8fe4071b38971564a2f11eb /lib/libzpool
parentab88e9e264c0500c2e758a16abf2f5d598f41a7c (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/libzpool')
-rw-r--r--lib/libzpool/kernel.c8
-rw-r--r--lib/libzpool/util.c2
2 files changed, 5 insertions, 5 deletions
diff --git a/lib/libzpool/kernel.c b/lib/libzpool/kernel.c
index ca3578993..e96a1d752 100644
--- a/lib/libzpool/kernel.c
+++ b/lib/libzpool/kernel.c
@@ -723,15 +723,15 @@ lowbit64(uint64_t i)
return (__builtin_ffsll(i));
}
-char *random_path = "/dev/random";
-char *urandom_path = "/dev/urandom";
+const char *random_path = "/dev/random";
+const char *urandom_path = "/dev/urandom";
static int random_fd = -1, urandom_fd = -1;
void
random_init(void)
{
- VERIFY((random_fd = open(random_path, O_RDONLY)) != -1);
- VERIFY((urandom_fd = open(urandom_path, O_RDONLY)) != -1);
+ VERIFY((random_fd = open(random_path, O_RDONLY | O_CLOEXEC)) != -1);
+ VERIFY((urandom_fd = open(urandom_path, O_RDONLY | O_CLOEXEC)) != -1);
}
void
diff --git a/lib/libzpool/util.c b/lib/libzpool/util.c
index 2da2375a1..20cabe7c2 100644
--- a/lib/libzpool/util.c
+++ b/lib/libzpool/util.c
@@ -259,7 +259,7 @@ pool_active(void *unused, const char *name, uint64_t guid,
* Use ZFS_IOC_POOL_SYNC to confirm if a pool is active
*/
- fd = open(ZFS_DEV, O_RDWR);
+ fd = open(ZFS_DEV, O_RDWR | O_CLOEXEC);
if (fd < 0)
return (-1);