Loading core/jni/fd_utils.cpp +18 −6 Original line number Diff line number Diff line Loading @@ -59,8 +59,8 @@ FileDescriptorWhitelist* FileDescriptorWhitelist::Get() { return instance_; } static bool IsMemfd(const std::string& path) { return android::base::StartsWith(path, "/memfd:"); static bool IsArtMemfd(const std::string& path) { return android::base::StartsWith(path, "/memfd:/boot-image-methods.art"); } bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const { Loading Loading @@ -91,8 +91,8 @@ bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const { return true; } // In-memory files created through memfd_create are allowed. if (IsMemfd(path)) { // the in-memory file created by ART through memfd_create is allowed. if (IsArtMemfd(path)) { return true; } Loading Loading @@ -321,8 +321,8 @@ void FileDescriptorInfo::ReopenOrDetach(fail_fn_t fail_fn) const { return DetachSocket(fail_fn); } // Children can directly use in-memory files created through memfd_create. if (IsMemfd(file_path)) { // Children can directly use the in-memory file created by ART through memfd_create. if (IsArtMemfd(file_path)) { return; } Loading Loading @@ -545,6 +545,10 @@ FileDescriptorTable::FileDescriptorTable( } void FileDescriptorTable::RestatInternal(std::set<int>& open_fds, fail_fn_t fail_fn) { // ART creates a file through memfd for optimization purposes. We make sure // there is at most one being created. bool art_memfd_seen = false; // Iterate through the list of file descriptors we've already recorded // and check whether : // Loading Loading @@ -577,6 +581,14 @@ void FileDescriptorTable::RestatInternal(std::set<int>& open_fds, fail_fn_t fail // FD. } if (IsArtMemfd(it->second->file_path)) { if (art_memfd_seen) { fail_fn("ART fd already seen: " + it->second->file_path); } else { art_memfd_seen = true; } } ++it; // Finally, remove the FD from the set of open_fds. We do this last because Loading Loading
core/jni/fd_utils.cpp +18 −6 Original line number Diff line number Diff line Loading @@ -59,8 +59,8 @@ FileDescriptorWhitelist* FileDescriptorWhitelist::Get() { return instance_; } static bool IsMemfd(const std::string& path) { return android::base::StartsWith(path, "/memfd:"); static bool IsArtMemfd(const std::string& path) { return android::base::StartsWith(path, "/memfd:/boot-image-methods.art"); } bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const { Loading Loading @@ -91,8 +91,8 @@ bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const { return true; } // In-memory files created through memfd_create are allowed. if (IsMemfd(path)) { // the in-memory file created by ART through memfd_create is allowed. if (IsArtMemfd(path)) { return true; } Loading Loading @@ -321,8 +321,8 @@ void FileDescriptorInfo::ReopenOrDetach(fail_fn_t fail_fn) const { return DetachSocket(fail_fn); } // Children can directly use in-memory files created through memfd_create. if (IsMemfd(file_path)) { // Children can directly use the in-memory file created by ART through memfd_create. if (IsArtMemfd(file_path)) { return; } Loading Loading @@ -545,6 +545,10 @@ FileDescriptorTable::FileDescriptorTable( } void FileDescriptorTable::RestatInternal(std::set<int>& open_fds, fail_fn_t fail_fn) { // ART creates a file through memfd for optimization purposes. We make sure // there is at most one being created. bool art_memfd_seen = false; // Iterate through the list of file descriptors we've already recorded // and check whether : // Loading Loading @@ -577,6 +581,14 @@ void FileDescriptorTable::RestatInternal(std::set<int>& open_fds, fail_fn_t fail // FD. } if (IsArtMemfd(it->second->file_path)) { if (art_memfd_seen) { fail_fn("ART fd already seen: " + it->second->file_path); } else { art_memfd_seen = true; } } ++it; // Finally, remove the FD from the set of open_fds. We do this last because Loading