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

Commit 2e254bb8 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

RESTRICT AUTOMERGE Use consistent calling uid and package in navigateUpTo am: 1c9bf5cc

Change-Id: Ie38d9bf7ac60dd60a2dc1d0aef798ddc01fe19f7
parents 4c05b628 1c9bf5cc
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -6786,7 +6786,7 @@ public class ActivityManagerService extends IActivityManager.Stub
        }
    }
    private final boolean attachApplicationLocked(IApplicationThread thread,
    private boolean attachApplicationLocked(@NonNull IApplicationThread thread,
            int pid) {
        // Find the application record that is being attached...  either via
@@ -7091,6 +7091,9 @@ public class ActivityManagerService extends IActivityManager.Stub
    @Override
    public final void attachApplication(IApplicationThread thread) {
        if (thread == null) {
            throw new SecurityException("Invalid application interface");
        }
        synchronized (this) {
            int callingPid = Binder.getCallingPid();
            final long origId = Binder.clearCallingIdentity();
+9 −4
Original line number Diff line number Diff line
@@ -3905,6 +3905,11 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai

    final boolean navigateUpToLocked(ActivityRecord srec, Intent destIntent, int resultCode,
            Intent resultData) {
        if (srec.app == null || srec.app.thread == null) {
            // Nothing to do if the caller is not attached, because this method should be called
            // from an alive activity.
            return false;
        }
        final TaskRecord task = srec.getTask();
        final ArrayList<ActivityRecord> activities = task.mActivities;
        final int start = activities.indexOf(srec);
@@ -3956,22 +3961,22 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
        }

        if (parent != null && foundParentInTask) {
            final int callingUid = srec.info.applicationInfo.uid;
            final int parentLaunchMode = parent.info.launchMode;
            final int destIntentFlags = destIntent.getFlags();
            if (parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE ||
                    parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TASK ||
                    parentLaunchMode == ActivityInfo.LAUNCH_SINGLE_TOP ||
                    (destIntentFlags & Intent.FLAG_ACTIVITY_CLEAR_TOP) != 0) {
                parent.deliverNewIntentLocked(srec.info.applicationInfo.uid, destIntent,
                        srec.packageName);
                parent.deliverNewIntentLocked(callingUid, destIntent, srec.packageName);
            } else {
                try {
                    ActivityInfo aInfo = AppGlobals.getPackageManager().getActivityInfo(
                            destIntent.getComponent(), 0, srec.userId);
                    int res = mService.mActivityStarter.startActivityLocked(srec.app.thread,
                            destIntent, null /*ephemeralIntent*/, null, aInfo, null /*rInfo*/, null,
                            null, parent.appToken, null, 0, -1, parent.launchedFromUid,
                            parent.launchedFromPackage, -1, parent.launchedFromUid, 0, null,
                            null, parent.appToken, null, 0, -1, callingUid,
                            srec.packageName, -1, callingUid, 0, null,
                            false, true, null, null, null, "navigateUpTo");
                    foundParentInTask = res == ActivityManager.START_SUCCESS;
                } catch (RemoteException e) {
+14 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.am;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -119,4 +120,17 @@ public class ActivityStackTests extends ActivityTestsBase {
        assertEquals(ActivityStack.STACK_VISIBLE_ACTIVITY_BEHIND,
                fullscreenWorkspaceStackId.shouldBeVisible(null /*starting*/));
    }

    @Test
    public void testNavigateUpTo() {
        final ActivityManagerService service = createActivityManagerService();
        final TaskRecord task = createTask(service, testActivityComponent, TEST_STACK_ID);
        final ActivityRecord activityRecord = createActivity(service, testActivityComponent, task);
        activityRecord.app = new ProcessRecord(null, activityRecord.appInfo,
                activityRecord.processName, activityRecord.getUid());
        final ActivityStack testStack = service.mStackSupervisor.getStack(TEST_STACK_ID);
        // No-op if the source activity record doesn't have attached process (app.thread == null).
        assertFalse(testStack.navigateUpToLocked(activityRecord, activityRecord.intent,
                0 /* resultCode */, null /* resultData */));
    }
}