[pacman-dev] [PATCH] Close file descirptor before fork
From: Wolfgang Bumiller <wry.git@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@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
participants (1)
-
Allan McRae