mirror of
https://https.git.savannah.gnu.org/git/guix.git/
synced 2025-07-12 01:50:46 +02:00
daemon: Use ‘close_range’ where available.
* nix/libutil/util.cc (closeMostFDs) [HAVE_CLOSE_RANGE]: Use ‘close_range’ when ‘exceptions’ is empty. * config-daemon.ac: Check for <linux/close_range.h> and the ‘close_range’ symbol. Change-Id: I12fa3bde58b003fcce5ea5a1fee1dcf9a92c0359
This commit is contained in:
parent
92205bab4d
commit
f03e6eff2f
2 changed files with 20 additions and 8 deletions
|
@ -78,7 +78,8 @@ if test "x$guix_build_daemon" = "xyes"; then
|
||||||
|
|
||||||
dnl Chroot support.
|
dnl Chroot support.
|
||||||
AC_CHECK_FUNCS([chroot unshare])
|
AC_CHECK_FUNCS([chroot unshare])
|
||||||
AC_CHECK_HEADERS([sched.h sys/param.h sys/mount.h sys/syscall.h])
|
AC_CHECK_HEADERS([sched.h sys/param.h sys/mount.h sys/syscall.h \
|
||||||
|
linux/close_range.h])
|
||||||
|
|
||||||
if test "x$ac_cv_func_chroot" != "xyes"; then
|
if test "x$ac_cv_func_chroot" != "xyes"; then
|
||||||
AC_MSG_ERROR(['chroot' function missing, bailing out])
|
AC_MSG_ERROR(['chroot' function missing, bailing out])
|
||||||
|
@ -95,7 +96,7 @@ if test "x$guix_build_daemon" = "xyes"; then
|
||||||
dnl strsignal: for error reporting.
|
dnl strsignal: for error reporting.
|
||||||
dnl statx: fine-grain 'stat' call, new in glibc 2.28.
|
dnl statx: fine-grain 'stat' call, new in glibc 2.28.
|
||||||
AC_CHECK_FUNCS([lutimes lchown posix_fallocate sched_setaffinity \
|
AC_CHECK_FUNCS([lutimes lchown posix_fallocate sched_setaffinity \
|
||||||
statvfs nanosleep strsignal statx])
|
statvfs nanosleep strsignal statx close_range])
|
||||||
|
|
||||||
dnl Check for <locale>.
|
dnl Check for <locale>.
|
||||||
AC_LANG_PUSH(C++)
|
AC_LANG_PUSH(C++)
|
||||||
|
|
|
@ -23,6 +23,10 @@
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_LINUX_CLOSE_RANGE_H
|
||||||
|
# include <linux/close_range.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
extern char * * environ;
|
extern char * * environ;
|
||||||
|
|
||||||
|
@ -1087,12 +1091,19 @@ string runProgram(Path program, bool searchPath, const Strings & args)
|
||||||
|
|
||||||
void closeMostFDs(const set<int> & exceptions)
|
void closeMostFDs(const set<int> & exceptions)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_CLOSE_RANGE
|
||||||
|
if (exceptions.empty())
|
||||||
|
close_range(3, ~0U, 0);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
int maxFD = 0;
|
int maxFD = 0;
|
||||||
maxFD = sysconf(_SC_OPEN_MAX);
|
maxFD = sysconf(_SC_OPEN_MAX);
|
||||||
for (int fd = 0; fd < maxFD; ++fd)
|
for (int fd = 0; fd < maxFD; ++fd)
|
||||||
if (fd != STDIN_FILENO && fd != STDOUT_FILENO && fd != STDERR_FILENO
|
if (fd != STDIN_FILENO && fd != STDOUT_FILENO && fd != STDERR_FILENO
|
||||||
&& exceptions.find(fd) == exceptions.end())
|
&& exceptions.find(fd) == exceptions.end())
|
||||||
close(fd); /* ignore result */
|
close(fd); /* ignore result */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue