aboutsummaryrefslogtreecommitdiff
path: root/src/common/util.cpp
diff options
context:
space:
mode:
authorRiccardo Spagni <ric@spagni.net>2018-10-20 20:34:15 +0200
committerRiccardo Spagni <ric@spagni.net>2018-10-20 20:34:15 +0200
commitfe0e426be434bf77a2200b57ddfee95decf9ceda (patch)
tree4a391412d7e97279aafd13f975dd83743fa55b7b /src/common/util.cpp
parentMerge pull request #4626 (diff)
parentspawn: close all file descriptors before execve (diff)
downloadmonero-fe0e426be434bf77a2200b57ddfee95decf9ceda.tar.xz
Merge pull request #4629
c7743929 spawn: close all file descriptors before execve (moneromooo-monero)
Diffstat (limited to 'src/common/util.cpp')
-rw-r--r--src/common/util.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/common/util.cpp b/src/common/util.cpp
index 7d8c9aa99..f91230528 100644
--- a/src/common/util.cpp
+++ b/src/common/util.cpp
@@ -28,6 +28,7 @@
//
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
+#include <unistd.h>
#include <cstdio>
#ifdef __GLIBC__
@@ -967,4 +968,23 @@ std::string get_nix_version_display_string()
}
#endif
+ void closefrom(int fd)
+ {
+#if defined __FreeBSD__ || defined __OpenBSD__ || defined __NetBSD__ || defined __DragonFly__
+ ::closefrom(fd);
+#else
+#if defined __GLIBC__
+ const int sc_open_max = sysconf(_SC_OPEN_MAX);
+ const int MAX_FDS = std::min(65536, sc_open_max);
+#else
+ const int MAX_FDS = 65536;
+#endif
+ while (fd < MAX_FDS)
+ {
+ close(fd);
+ ++fd;
+ }
+#endif
+ }
+
}