[pacman-dev] [PATCH] Close file descirptor before fork

Allan McRae allan at archlinux.org
Fri Nov 15 06:00:48 EST 2013


From: Wolfgang Bumiller <wry.git at bumiller.com>

FreeBSD chroot(2) fails with EPERM when a directory file descriptor is open
with either `kern.chroot_allow_open_directories` being 0, or when the process
already is inside a chroot.  This is exposed in alpm_run_chroot that uses
opendir() to open a file descriptor to the current directory before doing
the forking and chrooting.  Since the file descriptor is not used in the
forked process, we close it.

Fixes FS#36161.

Signed-off-by: Allan McRae <allan at archlinux.org>
---
 lib/libalpm/util.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lib/libalpm/util.c b/lib/libalpm/util.c
index f9fdb01..40a5ebd 100644
--- a/lib/libalpm/util.c
+++ b/lib/libalpm/util.c
@@ -542,6 +542,7 @@ int _alpm_run_chroot(alpm_handle_t *handle, const char *cmd, char *const argv[])
 		while(dup2(pipefd[1], 2) == -1 && errno == EINTR);
 		close(pipefd[0]);
 		close(pipefd[1]);
+		close(cwdfd);
 
 		/* use fprintf instead of _alpm_log to send output through the parent */
 		if(chroot(handle->root) != 0) {
-- 
1.8.4.2



More information about the pacman-dev mailing list