libzfs{,_core}: set O_CLOEXEC on persistent (ZFS_DEV and MNTTAB) fds

These were fd 3, 4, and 5 by the time zfs change-key hit
execute_key_fob()

glibc appends "e" to setmntent() mode, but musl's just returns fopen()

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Closes #11866
This commit is contained in:
наб 2021-03-10 00:00:43 +01:00 committed by Brian Behlendorf
parent 0fc401a7ef
commit 92ffd87aaf
4 changed files with 7 additions and 7 deletions

View File

@ -811,7 +811,7 @@ libzfs_mnttab_update(libzfs_handle_t *hdl)
struct mnttab entry; struct mnttab entry;
/* Reopen MNTTAB to prevent reading stale data from open file */ /* Reopen MNTTAB to prevent reading stale data from open file */
if (freopen(MNTTAB, "r", hdl->libzfs_mnttab) == NULL) if (freopen(MNTTAB, "re", hdl->libzfs_mnttab) == NULL)
return (ENOENT); return (ENOENT);
while (getmntent(hdl->libzfs_mnttab, &entry) == 0) { while (getmntent(hdl->libzfs_mnttab, &entry) == 0) {
@ -882,7 +882,7 @@ libzfs_mnttab_find(libzfs_handle_t *hdl, const char *fsname,
libzfs_mnttab_fini(hdl); libzfs_mnttab_fini(hdl);
/* Reopen MNTTAB to prevent reading stale data from open file */ /* Reopen MNTTAB to prevent reading stale data from open file */
if (freopen(MNTTAB, "r", hdl->libzfs_mnttab) == NULL) if (freopen(MNTTAB, "re", hdl->libzfs_mnttab) == NULL)
return (ENOENT); return (ENOENT);
srch.mnt_special = (char *)fsname; srch.mnt_special = (char *)fsname;

View File

@ -1517,7 +1517,7 @@ zpool_disable_datasets(zpool_handle_t *zhp, boolean_t force)
namelen = strlen(zhp->zpool_name); namelen = strlen(zhp->zpool_name);
/* Reopen MNTTAB to prevent reading stale data from open file */ /* Reopen MNTTAB to prevent reading stale data from open file */
if (freopen(MNTTAB, "r", hdl->libzfs_mnttab) == NULL) if (freopen(MNTTAB, "re", hdl->libzfs_mnttab) == NULL)
return (ENOENT); return (ENOENT);
used = alloc = 0; used = alloc = 0;

View File

@ -1024,15 +1024,15 @@ libzfs_init(void)
return (NULL); return (NULL);
} }
if ((hdl->libzfs_fd = open(ZFS_DEV, O_RDWR|O_EXCL)) < 0) { if ((hdl->libzfs_fd = open(ZFS_DEV, O_RDWR|O_EXCL|O_CLOEXEC)) < 0) {
free(hdl); free(hdl);
return (NULL); return (NULL);
} }
#ifdef HAVE_SETMNTENT #ifdef HAVE_SETMNTENT
if ((hdl->libzfs_mnttab = setmntent(MNTTAB, "r")) == NULL) { if ((hdl->libzfs_mnttab = setmntent(MNTTAB, "re")) == NULL) {
#else #else
if ((hdl->libzfs_mnttab = fopen(MNTTAB, "r")) == NULL) { if ((hdl->libzfs_mnttab = fopen(MNTTAB, "re")) == NULL) {
#endif #endif
(void) close(hdl->libzfs_fd); (void) close(hdl->libzfs_fd);
free(hdl); free(hdl);

View File

@ -137,7 +137,7 @@ libzfs_core_init(void)
{ {
(void) pthread_mutex_lock(&g_lock); (void) pthread_mutex_lock(&g_lock);
if (g_refcount == 0) { if (g_refcount == 0) {
g_fd = open(ZFS_DEV, O_RDWR); g_fd = open(ZFS_DEV, O_RDWR|O_CLOEXEC);
if (g_fd < 0) { if (g_fd < 0) {
(void) pthread_mutex_unlock(&g_lock); (void) pthread_mutex_unlock(&g_lock);
return (errno); return (errno);