diff options
author | Dimitry Ivanov <dimitry@google.com> | 2016-02-17 17:20:15 -0800 |
---|---|---|
committer | Dimitry Ivanov <dimitry@google.com> | 2016-02-17 17:22:20 -0800 |
commit | dab56737ca898d913c79c4ded76d78d8b3f5ffa3 (patch) | |
tree | f7ab065c51795dc4478afa4712ef33152fe76233 /libnativeloader/native_loader.cpp | |
parent | 7bbb4a0c49d22f19a19fae594706e73c06ad3b42 (diff) |
Limit libart.so visibility to apps targeting <= M
Add libart.so to the list of public libraries only for
apps targeting android M and below.
Bug: http://b/27210062
Bug: http://b/26436837
Change-Id: I1ed3b0335a343044a76273741ea8770dcce12ebe
Diffstat (limited to 'libnativeloader/native_loader.cpp')
-rw-r--r-- | libnativeloader/native_loader.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/libnativeloader/native_loader.cpp b/libnativeloader/native_loader.cpp index aaff64c35..a2d79e1f5 100644 --- a/libnativeloader/native_loader.cpp +++ b/libnativeloader/native_loader.cpp @@ -36,10 +36,6 @@ namespace android { #ifdef __ANDROID__ // TODO(dimitry): move this to system properties. static const char* kPublicNativeLibraries = "libandroid.so:" - // TODO (dimitry): This is a workaround for http://b/26436837 - // will be removed before the release. - "libart.so:" - // END OF WORKAROUND "libc.so:" "libcamera2ndk.so:" "libdl.so:" @@ -69,7 +65,8 @@ class LibraryNamespaces { android_namespace_t* GetOrCreate(JNIEnv* env, jobject class_loader, bool is_shared, jstring java_library_path, - jstring java_permitted_path) { + jstring java_permitted_path, + int32_t target_sdk_version) { ScopedUtfChars library_path(env, java_library_path); std::string permitted_path; @@ -78,7 +75,7 @@ class LibraryNamespaces { permitted_path = path.c_str(); } - if (!initialized_ && !InitPublicNamespace(library_path.c_str())) { + if (!initialized_ && !InitPublicNamespace(library_path.c_str(), target_sdk_version)) { return nullptr; } @@ -119,10 +116,19 @@ class LibraryNamespaces { } } - bool InitPublicNamespace(const char* library_path) { + bool InitPublicNamespace(const char* library_path, int32_t target_sdk_version) { // Some apps call dlopen from generated code unknown to linker in which // case linker uses anonymous namespace. See b/25844435 for details. - initialized_ = android_init_namespaces(kPublicNativeLibraries, library_path); + std::string publicNativeLibraries = kPublicNativeLibraries; + + // TODO (dimitry): This is a workaround for http://b/26436837 + // will be removed before the release. + if (target_sdk_version <= 23) { + publicNativeLibraries += ":libart.so"; + } + // END OF WORKAROUND + + initialized_ = android_init_namespaces(publicNativeLibraries.c_str(), library_path); return initialized_; } @@ -156,7 +162,7 @@ void* OpenNativeLibrary(JNIEnv* env, int32_t target_sdk_version, const char* pat android_namespace_t* ns = g_namespaces->GetOrCreate(env, class_loader, is_shared, - java_library_path, java_permitted_path); + java_library_path, java_permitted_path, target_sdk_version); if (ns == nullptr) { return nullptr; |