Disable fdsan after clone() am: ab5b3bd919
Original change: https://android-review.googlesource.com/c/platform/external/libbrillo/+/2922590
Change-Id: I907a949535002de4c714568cbca85ffe5c015e3c
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/Android.bp b/Android.bp
index 8a10dc8..b999c68 100644
--- a/Android.bp
+++ b/Android.bp
@@ -171,7 +171,9 @@
static_libs: [
"libmodpb64",
],
- header_libs: ["libgtest_prod_headers"],
+ header_libs: [
+ "libgtest_prod_headers",
+ ],
cflags: libbrillo_CFLAGS,
export_include_dirs: ["."],
diff --git a/brillo/process.cc b/brillo/process.cc
index 5623db8..1fb33bf 100644
--- a/brillo/process.cc
+++ b/brillo/process.cc
@@ -4,6 +4,10 @@
#include "brillo/process.h"
+#ifdef __BIONIC__
+#include <android/fdsan.h>
+#endif
+
#include <fcntl.h>
#include <signal.h>
#include <stdint.h>
@@ -37,11 +41,9 @@
return true;
}
-Process::Process() {
-}
+Process::Process() {}
-Process::~Process() {
-}
+Process::~Process() {}
bool Process::ProcessExists(pid_t pid) {
return base::DirectoryExists(
@@ -55,8 +57,7 @@
pre_exec_(base::Bind(&ReturnTrue)),
search_path_(false),
inherit_parent_signal_mask_(false),
- close_unused_file_descriptors_(false) {
-}
+ close_unused_file_descriptors_(false) {}
ProcessImpl::~ProcessImpl() {
Reset(0);
@@ -167,8 +168,7 @@
bool ProcessImpl::IsFileDescriptorInPipeMap(int fd) const {
for (const auto& pipe : pipe_map_) {
- if (fd == pipe.second.parent_fd_ ||
- fd == pipe.second.child_fd_ ||
+ if (fd == pipe.second.parent_fd_ || fd == pipe.second.child_fd_ ||
fd == pipe.first) {
return true;
}
@@ -259,6 +259,11 @@
}
void ProcessImpl::ExecChildProcess(char** argv) {
+#ifdef __BIONIC__
+ // Disable fdsan and fdtrack post-fork, so we don't falsely trigger on
+ // processes that fork, close all of their fds, and then exec.
+ android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_DISABLED);
+#endif
// Executing inside the child process.
// Close unused file descriptors.
if (close_unused_file_descriptors_) {
@@ -361,8 +366,8 @@
// kill the process that has just exited.
UpdatePid(0);
if (!WIFEXITED(status)) {
- DCHECK(WIFSIGNALED(status)) << old_pid
- << " neither exited, nor died on a signal?";
+ DCHECK(WIFSIGNALED(status))
+ << old_pid << " neither exited, nor died on a signal?";
LOG(ERROR) << "Process " << old_pid
<< " did not exit normally: " << WTERMSIG(status);
return -1;