Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29d9eba7 authored by Jiyong Park's avatar Jiyong Park
Browse files

Basedir of a bundled app is added to the permitted paths

For bundled apps, add the base directory of the app (e.g.,
/system/app/Foo/) to the permitted paths so that it can load libraries
embedded in module apks under the directory. For now, GmsCore is relying
on this, but this isn't specific to the app. Also note that, we don't
need to do this for unbundled apps as entire /data is already set to
the permitted paths for them.

Bug: 79211269
Test: m -j
Test: permitted paths of PrebuiltGmsCore contains
/system/priv-app/PrebuiltGmsCorePix

Change-Id: Id9a874fcec8479e952ab94cf33b2537f9aacd691
parent 49a987c2
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -64,6 +64,7 @@ import java.lang.ref.WeakReference;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URL;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
import java.util.Collections;
import java.util.Collections;
@@ -667,7 +668,17 @@ public final class LoadedApk {
        makePaths(mActivityThread, isBundledApp, mApplicationInfo, zipPaths, libPaths);
        makePaths(mActivityThread, isBundledApp, mApplicationInfo, zipPaths, libPaths);


        String libraryPermittedPath = mDataDir;
        String libraryPermittedPath = mDataDir;

        if (isBundledApp) {
        if (isBundledApp) {
            // For bundled apps, add the base directory of the app (e.g.,
            // /system/app/Foo/) to the permitted paths so that it can load libraries
            // embedded in module apks under the directory. For now, GmsCore is relying
            // on this, but this isn't specific to the app. Also note that, we don't
            // need to do this for unbundled apps as entire /data is already set to
            // the permitted paths for them.
            libraryPermittedPath += File.pathSeparator
                    + Paths.get(getAppDir()).getParent().toString();

            // This is necessary to grant bundled apps access to
            // This is necessary to grant bundled apps access to
            // libraries located in subdirectories of /system/lib
            // libraries located in subdirectories of /system/lib
            libraryPermittedPath += File.pathSeparator + defaultSearchPaths;
            libraryPermittedPath += File.pathSeparator + defaultSearchPaths;