Revert "Fix: vendor public libraries are accessible via System.loadLibrary"
am: 9c7d8b12b4
Change-Id: I37e549a8a39bdfd478808c415384d90537cbbe62
This commit is contained in:
@@ -883,48 +883,6 @@ public final class LoadedApk {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// /apex/com.android.art/lib, /vendor/lib, /odm/lib and /product/lib
|
|
||||||
// are added to the native lib search paths of the classloader.
|
|
||||||
// Note that this is done AFTER the classloader is
|
|
||||||
// created by ApplicationLoaders.getDefault().getClassLoader(...). The
|
|
||||||
// reason is because if we have added the paths when creating the classloader
|
|
||||||
// above, the paths are also added to the search path of the linker namespace
|
|
||||||
// 'classloader-namespace', which will allow ALL libs in the paths to apps.
|
|
||||||
// Since only the libs listed in <partition>/etc/public.libraries.txt can be
|
|
||||||
// available to apps, we shouldn't add the paths then.
|
|
||||||
//
|
|
||||||
// However, we need to add the paths to the classloader (Java) though. This
|
|
||||||
// is because when a native lib is requested via System.loadLibrary(), the
|
|
||||||
// classloader first tries to find the requested lib in its own native libs
|
|
||||||
// search paths. If a lib is not found in one of the paths, dlopen() is not
|
|
||||||
// called at all. This can cause a problem that a vendor public native lib
|
|
||||||
// is accessible when directly opened via dlopen(), but inaccesible via
|
|
||||||
// System.loadLibrary(). In order to prevent the problem, we explicitly
|
|
||||||
// add the paths only to the classloader, and not to the native loader
|
|
||||||
// (linker namespace).
|
|
||||||
List<String> extraLibPaths = new ArrayList<>(4);
|
|
||||||
String abiSuffix = VMRuntime.getRuntime().is64Bit() ? "64" : "";
|
|
||||||
if (!defaultSearchPaths.contains("/apex/com.android.art/lib")) {
|
|
||||||
extraLibPaths.add("/apex/com.android.art/lib" + abiSuffix);
|
|
||||||
}
|
|
||||||
if (!defaultSearchPaths.contains("/vendor/lib")) {
|
|
||||||
extraLibPaths.add("/vendor/lib" + abiSuffix);
|
|
||||||
}
|
|
||||||
if (!defaultSearchPaths.contains("/odm/lib")) {
|
|
||||||
extraLibPaths.add("/odm/lib" + abiSuffix);
|
|
||||||
}
|
|
||||||
if (!defaultSearchPaths.contains("/product/lib")) {
|
|
||||||
extraLibPaths.add("/product/lib" + abiSuffix);
|
|
||||||
}
|
|
||||||
if (!extraLibPaths.isEmpty()) {
|
|
||||||
StrictMode.ThreadPolicy oldPolicy = allowThreadDiskReads();
|
|
||||||
try {
|
|
||||||
ApplicationLoaders.getDefault().addNative(mDefaultClassLoader, extraLibPaths);
|
|
||||||
} finally {
|
|
||||||
setThreadPolicy(oldPolicy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (addedPaths != null && addedPaths.size() > 0) {
|
if (addedPaths != null && addedPaths.size() > 0) {
|
||||||
final String add = TextUtils.join(File.pathSeparator, addedPaths);
|
final String add = TextUtils.join(File.pathSeparator, addedPaths);
|
||||||
ApplicationLoaders.getDefault().addPath(mDefaultClassLoader, add);
|
ApplicationLoaders.getDefault().addPath(mDefaultClassLoader, add);
|
||||||
|
|||||||
Reference in New Issue
Block a user