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

Commit 96eca080 authored by Bryan Ferris's avatar Bryan Ferris Committed by Android (Google) Code Review
Browse files

Merge changes from topic "bp-real-calling-(p|u)id-merge-first" into cw-f-dev

* changes:
  [automerger] [RESTRICT AUTOMERGE] Pass correct realCallingUid to startActivity() from startActivityInPackage am: 216f65bf am: 0984de50
  [automerger] [RESTRICT AUTOMERGE] Pass correct realCallingUid to startActivity() from startActivityInPackage am: 216f65bf
  [RESTRICT AUTOMERGE] Pass correct realCallingUid to startActivity() from startActivityInPackage
parents 130f7327 36fdca0a
Loading
Loading
Loading
Loading
+12 −5
Original line number Original line Diff line number Diff line
@@ -4746,9 +4746,9 @@ public final class ActivityManagerService extends ActivityManagerNative
                userId, false, ALLOW_FULL_ONLY, "startActivityInPackage", null);
                userId, false, ALLOW_FULL_ONLY, "startActivityInPackage", null);
        // TODO: Switch to user app stacks here.
        // TODO: Switch to user app stacks here.
        int ret = mActivityStarter.startActivityMayWait(null, uid, callingPackage, intent,
        int ret = mActivityStarter.startActivityMayWait(null, uid, ActivityStarter.PID_NULL, uid,
                resolvedType, null, null, resultTo, resultWho, requestCode, startFlags,
                callingPackage, intent, resolvedType, null, null, resultTo, resultWho, requestCode,
                null, null, null, bOptions, false, userId, container, inTask);
                startFlags, null, null, null, bOptions, false, userId, container, inTask);
        return ret;
        return ret;
    }
    }
@@ -4768,12 +4768,19 @@ public final class ActivityManagerService extends ActivityManagerNative
    final int startActivitiesInPackage(int uid, String callingPackage,
    final int startActivitiesInPackage(int uid, String callingPackage,
            Intent[] intents, String[] resolvedTypes, IBinder resultTo,
            Intent[] intents, String[] resolvedTypes, IBinder resultTo,
            Bundle bOptions, int userId) {
            Bundle bOptions, int userId) {
        return startActivitiesInPackage(uid, ActivityStarter.PID_NULL, UserHandle.USER_NULL,
                callingPackage, intents, resolvedTypes, resultTo, bOptions, userId);
    }
    final int startActivitiesInPackage(int uid, int realCallingPid, int realCallingUid,
                                       String callingPackage, Intent[] intents, String[] resolvedTypes,
                                       IBinder resultTo, Bundle bOptions, int userId) {
        userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
        userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
                userId, false, ALLOW_FULL_ONLY, "startActivityInPackage", null);
                userId, false, ALLOW_FULL_ONLY, "startActivityInPackage", null);
        // TODO: Switch to user app stacks here.
        // TODO: Switch to user app stacks here.
        int ret = mActivityStarter.startActivities(null, uid, callingPackage, intents, resolvedTypes,
        int ret = mActivityStarter.startActivities(null, uid, realCallingPid, realCallingUid,
                resultTo, bOptions, userId);
                callingPackage, intents, resolvedTypes, resultTo, bOptions, userId);
        return ret;
        return ret;
    }
    }
+45 −11
Original line number Original line Diff line number Diff line
@@ -127,6 +127,8 @@ import java.util.ArrayList;
 * an activity and associated task and stack.
 * an activity and associated task and stack.
 */
 */
class ActivityStarter {
class ActivityStarter {
    public static final int PID_NULL = 0;

    private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStarter" : TAG_AM;
    private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityStarter" : TAG_AM;
    private static final String TAG_RESULTS = TAG + POSTFIX_RESULTS;
    private static final String TAG_RESULTS = TAG + POSTFIX_RESULTS;
    private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS;
    private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS;
@@ -713,12 +715,24 @@ class ActivityStarter {
                UserHandle.CURRENT);
                UserHandle.CURRENT);
    }
    }


  final int startActivityMayWait(IApplicationThread caller, int callingUid, String callingPackage,
            Intent intent, String resolvedType, IVoiceInteractionSession voiceSession,
            IVoiceInteractor voiceInteractor, IBinder resultTo, String resultWho, int requestCode,
            int startFlags, ProfilerInfo profilerInfo, IActivityManager.WaitResult outResult,
            Configuration config, Bundle bOptions, boolean ignoreTargetSecurity, int userId,
            IActivityContainer iContainer, TaskRecord inTask) {
        return startActivityMayWait(caller, callingUid, PID_NULL, UserHandle.USER_NULL,
             callingPackage, intent, resolvedType, voiceSession, voiceInteractor, resultTo,
             resultWho, requestCode, startFlags, profilerInfo, outResult, config, bOptions,
             ignoreTargetSecurity, userId, iContainer, inTask);
    }

    final int startActivityMayWait(IApplicationThread caller, int callingUid,
    final int startActivityMayWait(IApplicationThread caller, int callingUid,
            String callingPackage, Intent intent, String resolvedType,
            int requestRealCallingPid, int requestRealCallingUid, String callingPackage,
            IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
            Intent intent, String resolvedType, IVoiceInteractionSession voiceSession,
            IBinder resultTo, String resultWho, int requestCode, int startFlags,
            IVoiceInteractor voiceInteractor, IBinder resultTo, String resultWho, int requestCode,
            ProfilerInfo profilerInfo, IActivityManager.WaitResult outResult, Configuration config,
            int startFlags, ProfilerInfo profilerInfo, IActivityManager.WaitResult outResult,
            Bundle bOptions, boolean ignoreTargetSecurity, int userId,
            Configuration config, Bundle bOptions, boolean ignoreTargetSecurity, int userId,
            IActivityContainer iContainer, TaskRecord inTask) {
            IActivityContainer iContainer, TaskRecord inTask) {
        // Refuse possible leaked file descriptors
        // Refuse possible leaked file descriptors
        if (intent != null && intent.hasFileDescriptors()) {
        if (intent != null && intent.hasFileDescriptors()) {
@@ -769,8 +783,14 @@ class ActivityStarter {
                // Cannot start a child activity if the parent is not resumed.
                // Cannot start a child activity if the parent is not resumed.
                return ActivityManager.START_CANCELED;
                return ActivityManager.START_CANCELED;
            }
            }
            final int realCallingPid = Binder.getCallingPid();

            final int realCallingUid = Binder.getCallingUid();
            final int realCallingPid = requestRealCallingPid != PID_NULL
                ? requestRealCallingPid
                : Binder.getCallingPid();
            final int realCallingUid = requestRealCallingUid != UserHandle.USER_NULL
                ? requestRealCallingUid
                : Binder.getCallingUid();

            int callingPid;
            int callingPid;
            if (callingUid >= 0) {
            if (callingUid >= 0) {
                callingPid = -1;
                callingPid = -1;
@@ -781,6 +801,7 @@ class ActivityStarter {
                callingPid = callingUid = -1;
                callingPid = callingUid = -1;
            }
            }



            final ActivityStack stack;
            final ActivityStack stack;
            if (container == null || container.mStack.isOnHomeDisplay()) {
            if (container == null || container.mStack.isOnHomeDisplay()) {
                stack = mSupervisor.mFocusedStack;
                stack = mSupervisor.mFocusedStack;
@@ -922,8 +943,16 @@ class ActivityStarter {
    }
    }


    final int startActivities(IApplicationThread caller, int callingUid, String callingPackage,
    final int startActivities(IApplicationThread caller, int callingUid, String callingPackage,
            Intent[] intents, String[] resolvedTypes, IBinder resultTo,
            Intent[] intents, String[] resolvedTypes, IBinder resultTo, Bundle bOptions,
            Bundle bOptions, int userId) {
            int userId) {
        return startActivities(caller, callingUid, PID_NULL, UserHandle.USER_NULL, callingPackage,
             intents, resolvedTypes, resultTo, bOptions, userId);
    }

    final int startActivities(IApplicationThread caller, int callingUid,
            int incomingRealCallingPid, int incomingRealCallingUid, String callingPackage,
            Intent[] intents, String[] resolvedTypes, IBinder resultTo, Bundle bOptions,
            int userId) {
        if (intents == null) {
        if (intents == null) {
            throw new NullPointerException("intents is null");
            throw new NullPointerException("intents is null");
        }
        }
@@ -934,8 +963,13 @@ class ActivityStarter {
            throw new IllegalArgumentException("intents are length different than resolvedTypes");
            throw new IllegalArgumentException("intents are length different than resolvedTypes");
        }
        }


        final int realCallingPid = Binder.getCallingPid();
        final int realCallingPid = incomingRealCallingPid != PID_NULL
        final int realCallingUid = Binder.getCallingUid();
                     ? incomingRealCallingPid
                     : Binder.getCallingPid();

        final int realCallingUid = incomingRealCallingUid != UserHandle.USER_NULL
                     ? incomingRealCallingUid
                     : Binder.getCallingUid();


        int callingPid;
        int callingPid;
        if (callingUid >= 0) {
        if (callingUid >= 0) {