diff options
| author | 2024-10-09 01:50:57 +0000 | |
|---|---|---|
| committer | 2024-10-09 10:56:35 +0000 | |
| commit | 20c568e77eae5d469cd5e594b644d8645d830dbd (patch) | |
| tree | 4986da34c466d5af10eaa2bfd5e9aaf51cf933a7 | |
| parent | 0eae0e93ca99aca43eb5c073d017c645c3b3f168 (diff) | |
Pass SafeActivityOptions with actual caller for startActivityInTF
We clearCallingUid before apply the WCT, but SafeActivityOptions will
query the Binder Uid when construct. Update to pass in the actual
caller.
Flag: EXEMPT bug fix
Bug: 369103643
Test: atest WmTests:WindowOrganizerTests#
testStartActivityInTaskFragment_checkCallerPermission
Change-Id: I873ae576de0bc4a7402c2f522b45853bce48a0c5
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStartController.java | 5 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowOrganizerController.java | 4 |
2 files changed, 5 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStartController.java b/services/core/java/com/android/server/wm/ActivityStartController.java index 35ec5adf54b0..0580d4a5a4a3 100644 --- a/services/core/java/com/android/server/wm/ActivityStartController.java +++ b/services/core/java/com/android/server/wm/ActivityStartController.java @@ -43,7 +43,6 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Binder; -import android.os.Bundle; import android.os.IBinder; import android.os.Trace; import android.os.UserHandle; @@ -550,14 +549,14 @@ public class ActivityStartController { * Starts an activity in the TaskFragment. * @param taskFragment TaskFragment {@link TaskFragment} to start the activity in. * @param activityIntent intent to start the activity. - * @param activityOptions ActivityOptions to start the activity with. + * @param activityOptions SafeActivityOptions to start the activity with. * @param resultTo the caller activity * @param callingUid the caller uid * @param callingPid the caller pid * @return the start result. */ int startActivityInTaskFragment(@NonNull TaskFragment taskFragment, - @NonNull Intent activityIntent, @Nullable Bundle activityOptions, + @NonNull Intent activityIntent, @Nullable SafeActivityOptions activityOptions, @Nullable IBinder resultTo, int callingUid, int callingPid, @Nullable IBinder errorCallbackToken) { final ActivityRecord caller = diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java index f8d0bc252b0f..fe2a8850905c 100644 --- a/services/core/java/com/android/server/wm/WindowOrganizerController.java +++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java @@ -1517,8 +1517,10 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub final IBinder callerActivityToken = operation.getActivityToken(); final Intent activityIntent = operation.getActivityIntent(); final Bundle activityOptions = operation.getBundle(); + final SafeActivityOptions safeOptions = + SafeActivityOptions.fromBundle(activityOptions, caller.mPid, caller.mUid); final int result = waitAsyncStart(() -> mService.getActivityStartController() - .startActivityInTaskFragment(taskFragment, activityIntent, activityOptions, + .startActivityInTaskFragment(taskFragment, activityIntent, safeOptions, callerActivityToken, caller.mUid, caller.mPid, errorCallbackToken)); if (!isStartResultSuccessful(result)) { |