Close file descirptor before fork

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>
This commit is contained in:
Wolfgang Bumiller 2013-11-15 20:54:27 +10:00 committed by Allan McRae
parent 759c48cd34
commit 20127e732c
1 changed files with 1 additions and 0 deletions

View File

@ -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) {