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

Commit f4d23f30 authored by Christopher Tate's avatar Christopher Tate Committed by Suprabh Shukla
Browse files

DO NOT MERGE Isolated processes don't get precached system service binders

More specifically, they get a PackageManager binder -- necessary for
Android process startup and configuration -- but none of the other
usual preloaded service binders.

Bug 30202228

Change-Id: I3810649f504cd631665ece338a83d2e54d41ad05
(cherry picked from commit 2c61c57a)
parent 2cd4383c
Loading
Loading
Loading
Loading
+16 −9
Original line number Diff line number Diff line
@@ -983,6 +983,7 @@ public final class ActivityManagerService extends ActivityManagerNative
     * For example, references to the commonly used services.
     */
    HashMap<String, IBinder> mAppBindArgs;
    HashMap<String, IBinder> mIsolatedAppBindArgs;
    /**
     * Temporary to avoid allocations.  Protected by main lock.
@@ -2586,19 +2587,25 @@ public final class ActivityManagerService extends ActivityManagerNative
     * lazily setup to make sure the services are running when they're asked for.
     */
    private HashMap<String, IBinder> getCommonServicesLocked(boolean isolated) {
        // Isolated processes won't get this optimization, so that we don't
        // violate the rules about which services they have access to.
        if (isolated) {
            if (mIsolatedAppBindArgs == null) {
                mIsolatedAppBindArgs = new HashMap<>();
                mIsolatedAppBindArgs.put("package", ServiceManager.getService("package"));
            }
            return mIsolatedAppBindArgs;
        }
        if (mAppBindArgs == null) {
            mAppBindArgs = new HashMap<>();
            // Isolated processes won't get this optimization, so that we don't
            // violate the rules about which services they have access to.
            if (!isolated) {
            // Setup the application init args
            mAppBindArgs.put("package", ServiceManager.getService("package"));
            mAppBindArgs.put("window", ServiceManager.getService("window"));
            mAppBindArgs.put(Context.ALARM_SERVICE,
                    ServiceManager.getService(Context.ALARM_SERVICE));
        }
        }
        return mAppBindArgs;
    }