summaryrefslogtreecommitdiff
path: root/core/jni/fd_utils.cpp
diff options
context:
space:
mode:
authorNicolas Geoffray <ngeoffray@google.com>2019-10-24 15:33:01 +0100
committerNicolas Geoffray <ngeoffray@google.com>2019-10-24 15:33:01 +0100
commit813b9e8cb49e50eeace57247f180a97acb0e789b (patch)
tree2a4a80c8f27dc272aa7a821ea9016a38af225fbe /core/jni/fd_utils.cpp
parent7e62a930a14de49b70fe4921b29f9a16fb83128a (diff)
Whitelist file descriptors created through memfd_create.
ART has the need of creating such a file descriptor. Bug: 119800099 Test: Device boots Change-Id: Iefeab88e9f1b2dcf963ea913e416863191a52e8f
Diffstat (limited to 'core/jni/fd_utils.cpp')
-rw-r--r--core/jni/fd_utils.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/core/jni/fd_utils.cpp b/core/jni/fd_utils.cpp
index bb5780558bdf..c0e4e1fe5e7a 100644
--- a/core/jni/fd_utils.cpp
+++ b/core/jni/fd_utils.cpp
@@ -59,6 +59,10 @@ FileDescriptorWhitelist* FileDescriptorWhitelist::Get() {
return instance_;
}
+static bool IsMemfd(const std::string& path) {
+ return android::base::StartsWith(path, "/memfd:");
+}
+
bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const {
// Check the static whitelist path.
for (const auto& whitelist_path : kPathWhitelist) {
@@ -87,6 +91,11 @@ bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const {
return true;
}
+ // In-memory files created through memfd_create are allowed.
+ if (IsMemfd(path)) {
+ return true;
+ }
+
// Whitelist files needed for Runtime Resource Overlay, like these:
// /system/vendor/overlay/framework-res.apk
// /system/vendor/overlay-subdir/pg/framework-res.apk
@@ -312,6 +321,11 @@ 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)) {
+ return;
+ }
+
// NOTE: This might happen if the file was unlinked after being opened.
// It's a common pattern in the case of temporary files and the like but
// we should not allow such usage from the zygote.