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 <behlendorf1@llnl.gov>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Closes #11866
This commit is contained in:
наб
2021-04-08 22:17:38 +02:00
committed by Brian Behlendorf
parent ab88e9e264
commit 2453d0263d
22 changed files with 51 additions and 62 deletions
+2 -2
View File
@@ -45,7 +45,7 @@ get_spl_hostid(void)
return (hostid & HOSTID_MASK);
}
f = fopen("/sys/module/spl/parameters/spl_hostid", "r");
f = fopen("/sys/module/spl/parameters/spl_hostid", "re");
if (!f)
return (0);
@@ -74,7 +74,7 @@ get_system_hostid(void)
unsigned long hostid;
int hostid_size = 4; /* 4 bytes regardless of arch */
fd = open("/etc/hostid", O_RDONLY);
fd = open("/etc/hostid", O_RDONLY | O_CLOEXEC);
if (fd >= 0) {
rc = read(fd, &hostid, hostid_size);
if (rc > 0)
+2 -2
View File
@@ -128,9 +128,9 @@ getextmntent(const char *path, struct extmnttab *entry, struct stat64 *statbuf)
#ifdef HAVE_SETMNTENT
if ((fp = setmntent(MNTTAB, "r")) == NULL) {
if ((fp = setmntent(MNTTAB, "re")) == NULL) {
#else
if ((fp = fopen(MNTTAB, "r")) == NULL) {
if ((fp = fopen(MNTTAB, "re")) == NULL) {
#endif
(void) fprintf(stderr, "cannot open %s\n", MNTTAB);
return (-1);