summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Steven Moreland <smoreland@google.com> 2022-05-18 22:04:49 +0000
committer Steven Moreland <smoreland@google.com> 2022-05-20 16:09:50 +0000
commitdf732baf74ca36d50e60c31179e6364d8fd4aa06 (patch)
tree1ef05275d5ca6cb713e085554cb8dc1195d1fa80
parent97c1356a08376bd1664a0ce5be5591fe9c91c7d6 (diff)
libbinder: O_CLOFORK
You can't use binder after forking, so we can drop the FD. The binder driver doesn't support this (once the FD is open, we would need to open a new context in the child process). So, the userspace API would need to handle resetting all state. However, in general, handling this for multi-threaded processes (because of needing to take all locks by all libraries used by all threads and restoring state, etc...) is too complicated to make work in Android. Bug: 232904068 Test: binderLibTest Change-Id: I38c354af2c69804a40dc2774086a9ab77d158ede
-rw-r--r--libs/binder/ProcessState.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/libs/binder/ProcessState.cpp b/libs/binder/ProcessState.cpp
index 68958e655a..433885d5b0 100644
--- a/libs/binder/ProcessState.cpp
+++ b/libs/binder/ProcessState.cpp
@@ -175,6 +175,10 @@ void ProcessState::childPostFork() {
// the thread handler is installed
if (gProcess) {
gProcess->mForked = true;
+
+ // "O_CLOFORK"
+ close(gProcess->mDriverFD);
+ gProcess->mDriverFD = -1;
}
gProcessMutex.unlock();
}