summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libcamera/process.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp
index 7f3a6518..d836fb07 100644
--- a/src/libcamera/process.cpp
+++ b/src/libcamera/process.cpp
@@ -259,7 +259,21 @@ int Process::start(const std::string &path,
if (isolate())
_exit(EXIT_FAILURE);
- closeAllFdsExcept(fds);
+ std::vector<int> v(fds);
+ v.push_back(STDERR_FILENO);
+ closeAllFdsExcept(v);
+
+ const auto tryDevNullLowestFd = [](int expected, int oflag) {
+ int fd = open("/dev/null", oflag);
+ if (fd < 0)
+ _exit(EXIT_FAILURE);
+ if (fd != expected)
+ close(fd);
+ };
+
+ tryDevNullLowestFd(STDIN_FILENO, O_RDONLY);
+ tryDevNullLowestFd(STDOUT_FILENO, O_WRONLY);
+ tryDevNullLowestFd(STDERR_FILENO, O_WRONLY);
const char *file = utils::secure_getenv("LIBCAMERA_LOG_FILE");
if (file && strcmp(file, "syslog"))