mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	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:
		
							parent
							
								
									a559c3d0f4
								
							
						
					
					
						commit
						f831d1377f
					
				@ -813,7 +813,7 @@ libzfs_mnttab_update(libzfs_handle_t *hdl)
 | 
			
		||||
	struct mnttab entry;
 | 
			
		||||
 | 
			
		||||
	/* 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);
 | 
			
		||||
 | 
			
		||||
	while (getmntent(hdl->libzfs_mnttab, &entry) == 0) {
 | 
			
		||||
@ -884,7 +884,7 @@ libzfs_mnttab_find(libzfs_handle_t *hdl, const char *fsname,
 | 
			
		||||
			libzfs_mnttab_fini(hdl);
 | 
			
		||||
 | 
			
		||||
		/* 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);
 | 
			
		||||
 | 
			
		||||
		srch.mnt_special = (char *)fsname;
 | 
			
		||||
 | 
			
		||||
@ -1496,7 +1496,7 @@ zpool_disable_datasets(zpool_handle_t *zhp, boolean_t force)
 | 
			
		||||
	namelen = strlen(zhp->zpool_name);
 | 
			
		||||
 | 
			
		||||
	/* 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);
 | 
			
		||||
 | 
			
		||||
	used = alloc = 0;
 | 
			
		||||
 | 
			
		||||
@ -1024,15 +1024,15 @@ libzfs_init(void)
 | 
			
		||||
		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);
 | 
			
		||||
		return (NULL);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_SETMNTENT
 | 
			
		||||
	if ((hdl->libzfs_mnttab = setmntent(MNTTAB, "r")) == NULL) {
 | 
			
		||||
	if ((hdl->libzfs_mnttab = setmntent(MNTTAB, "re")) == NULL) {
 | 
			
		||||
#else
 | 
			
		||||
	if ((hdl->libzfs_mnttab = fopen(MNTTAB, "r")) == NULL) {
 | 
			
		||||
	if ((hdl->libzfs_mnttab = fopen(MNTTAB, "re")) == NULL) {
 | 
			
		||||
#endif
 | 
			
		||||
		(void) close(hdl->libzfs_fd);
 | 
			
		||||
		free(hdl);
 | 
			
		||||
 | 
			
		||||
@ -137,7 +137,7 @@ libzfs_core_init(void)
 | 
			
		||||
{
 | 
			
		||||
	(void) pthread_mutex_lock(&g_lock);
 | 
			
		||||
	if (g_refcount == 0) {
 | 
			
		||||
		g_fd = open(ZFS_DEV, O_RDWR);
 | 
			
		||||
		g_fd = open(ZFS_DEV, O_RDWR|O_CLOEXEC);
 | 
			
		||||
		if (g_fd < 0) {
 | 
			
		||||
			(void) pthread_mutex_unlock(&g_lock);
 | 
			
		||||
			return (errno);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user