diff options
author | 2018-12-17 07:43:34 +0000 | |
---|---|---|
committer | 2018-12-17 07:43:34 +0000 | |
commit | a4d036e98b4c93dc1155912eaf66af3df5dcacb3 (patch) | |
tree | 916e1f8f2a9e5f12457f9adab9edaef43b816560 | |
parent | 783ec049091357ae892d4c62e4e75008734815e7 (diff) | |
parent | d9765a4cc05464d4082dac79585dccf4b11aa7ea (diff) |
Merge "fd_utils: carry over O_CLOEXEC on duplicated FDs"
-rw-r--r-- | core/jni/fd_utils.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/core/jni/fd_utils.cpp b/core/jni/fd_utils.cpp index d457a1b48e38..a03e929fa60b 100644 --- a/core/jni/fd_utils.cpp +++ b/core/jni/fd_utils.cpp @@ -327,11 +327,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; |