summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Nick Kralevich <nnk@google.com> 2018-12-17 00:39:17 -0800
committer android-build-merger <android-build-merger@google.com> 2018-12-17 00:39:17 -0800
commitba43dba34ce2793c0d8d4d887eaf60d8bf4a1b47 (patch)
treee43bf4e390df5f63ec2c0665e9fe7b59e4c816a0
parent4e172cc51259d94bad8f03d828d65dd10681ac0a (diff)
parentbb67b501f9f4dd398ada8f47090a9f889639f327 (diff)
Merge "fd_utils: carry over O_CLOEXEC on duplicated FDs" am: a4d036e98b am: ac9d96a03c
am: bb67b501f9 Change-Id: I72708593cf1038a5723ab5492d7087a6936c02e6
-rw-r--r--core/jni/fd_utils.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/core/jni/fd_utils.cpp b/core/jni/fd_utils.cpp
index a398e498a301..33b26899fe81 100644
--- a/core/jni/fd_utils.cpp
+++ b/core/jni/fd_utils.cpp
@@ -331,11 +331,13 @@ bool FileDescriptorInfo::ReopenOrDetach(std::string* error_msg) const {
return false;
}
- if (TEMP_FAILURE_RETRY(dup2(new_fd, fd)) == -1) {
+ int dupFlags = (fd_flags & FD_CLOEXEC) ? O_CLOEXEC : 0;
+ if (TEMP_FAILURE_RETRY(dup3(new_fd, fd, dupFlags)) == -1) {
close(new_fd);
- *error_msg = android::base::StringPrintf("Failed dup2(%d, %d) (%s): %s",
+ *error_msg = android::base::StringPrintf("Failed dup3(%d, %d, %d) (%s): %s",
fd,
new_fd,
+ dupFlags,
file_path.c_str(),
strerror(errno));
return false;