OSDN Git Service

[RESTRICT AUTOMERGE] Pass correct realCallingUid to startActivity() if provided by...
[android-x86/frameworks-base.git] / services / core / java / com / android / server / am / ActivityStarter.java
index a739af9..0be27d1 100644 (file)
@@ -282,6 +282,8 @@ class ActivityStarter {
      * execution.
      */
     private static class Request {
+        static final int DEFAULT_REAL_CALLING_PID = 0;
+        static final int DEFAULT_REAL_CALLING_UID = UserHandle.USER_NULL;
         private static final int DEFAULT_CALLING_UID = -1;
         private static final int DEFAULT_CALLING_PID = 0;
 
@@ -296,11 +298,11 @@ class ActivityStarter {
         IBinder resultTo;
         String resultWho;
         int requestCode;
-        int callingPid = DEFAULT_CALLING_UID;
-        int callingUid = DEFAULT_CALLING_PID;
+        int callingPid = DEFAULT_CALLING_PID;
+        int callingUid = DEFAULT_CALLING_UID;
         String callingPackage;
-        int realCallingPid;
-        int realCallingUid;
+        int realCallingPid = Request.DEFAULT_REAL_CALLING_PID;
+        int realCallingUid = Request.DEFAULT_REAL_CALLING_UID;
         int startFlags;
         SafeActivityOptions activityOptions;
         boolean ignoreTargetSecurity;
@@ -354,8 +356,8 @@ class ActivityStarter {
             callingPid = DEFAULT_CALLING_PID;
             callingUid = DEFAULT_CALLING_UID;
             callingPackage = null;
-            realCallingPid = 0;
-            realCallingUid = 0;
+            realCallingPid = Request.DEFAULT_REAL_CALLING_PID;
+            realCallingUid = Request.DEFAULT_REAL_CALLING_UID;
             startFlags = 0;
             activityOptions = null;
             ignoreTargetSecurity = false;
@@ -370,7 +372,7 @@ class ActivityStarter {
             mayWait = false;
             avoidMoveToFront = false;
             allowPendingRemoteAnimationRegistryLookup = true;
-            filterCallingUid = UserHandle.USER_NULL;
+            filterCallingUid = DEFAULT_REAL_CALLING_UID;
             originatingPendingIntent = null;
         }
 
@@ -488,7 +490,8 @@ class ActivityStarter {
             // for transactional diffs and preprocessing.
             if (mRequest.mayWait) {
                 return startActivityMayWait(mRequest.caller, mRequest.callingUid,
-                        mRequest.callingPackage, mRequest.intent, mRequest.resolvedType,
+                        mRequest.callingPackage, mRequest.realCallingPid, mRequest.realCallingUid,
+                        mRequest.intent, mRequest.resolvedType,
                         mRequest.voiceSession, mRequest.voiceInteractor, mRequest.resultTo,
                         mRequest.resultWho, mRequest.requestCode, mRequest.startFlags,
                         mRequest.profilerInfo, mRequest.waitResult, mRequest.globalConfig,
@@ -999,7 +1002,8 @@ class ActivityStarter {
     }
 
     private int startActivityMayWait(IApplicationThread caller, int callingUid,
-            String callingPackage, Intent intent, String resolvedType,
+            String callingPackage, int requestRealCallingPid, int requestRealCallingUid,
+            Intent intent, String resolvedType,
             IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
             IBinder resultTo, String resultWho, int requestCode, int startFlags,
             ProfilerInfo profilerInfo, WaitResult outResult,
@@ -1014,8 +1018,12 @@ class ActivityStarter {
         mSupervisor.getActivityMetricsLogger().notifyActivityLaunching();
         boolean componentSpecified = intent.getComponent() != null;
 
-        final int realCallingPid = Binder.getCallingPid();
-        final int realCallingUid = Binder.getCallingUid();
+        final int realCallingPid = requestRealCallingPid != Request.DEFAULT_REAL_CALLING_PID
+                                   ? requestRealCallingPid
+                                   : Binder.getCallingPid();
+        final int realCallingUid = requestRealCallingUid != Request.DEFAULT_REAL_CALLING_UID
+                                   ? requestRealCallingUid
+                                   : Binder.getCallingUid();
 
         int callingPid;
         if (callingUid >= 0) {
@@ -1242,7 +1250,7 @@ class ActivityStarter {
      */
     static int computeResolveFilterUid(int customCallingUid, int actualCallingUid,
             int filterCallingUid) {
-        return filterCallingUid != UserHandle.USER_NULL
+        return filterCallingUid != Request.DEFAULT_REAL_CALLING_UID
                 ? filterCallingUid
                 : (customCallingUid >= 0 ? customCallingUid : actualCallingUid);
     }