diff options
| author | 2020-06-24 19:02:20 +0000 | |
|---|---|---|
| committer | 2020-06-24 19:02:20 +0000 | |
| commit | 873890061f7ebc6449417e25c5ac29c86b46ae7c (patch) | |
| tree | fc08d7335ec2064f27f697f650aad6567333d7f4 | |
| parent | 88d687b6b6289c259a465c0260ba2bcca4cd255f (diff) | |
| parent | c40369b03d17efcd72932017ad1361ee4b288a88 (diff) | |
Merge "Collect Uri grants for startActivities()." into rvc-dev am: fe1d660cce am: c40369b03d
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11932141
Change-Id: I50a1ea8fe3afe21ee5c1bff3156080f300b98cf0
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStartController.java | 11 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityStarter.java | 5 |
2 files changed, 16 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityStartController.java b/services/core/java/com/android/server/wm/ActivityStartController.java index 6fbfa68d9309..16ca60d1519b 100644 --- a/services/core/java/com/android/server/wm/ActivityStartController.java +++ b/services/core/java/com/android/server/wm/ActivityStartController.java @@ -52,6 +52,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.server.am.ActivityManagerService; import com.android.server.am.PendingIntentRecord; +import com.android.server.uri.NeededUriGrants; import com.android.server.wm.ActivityStackSupervisor.PendingActivityLaunch; import com.android.server.wm.ActivityStarter.DefaultFactory; import com.android.server.wm.ActivityStarter.Factory; @@ -402,6 +403,7 @@ public class ActivityStartController { // potentially acquire activity manager lock that leads to deadlock. for (int i = 0; i < intents.length; i++) { Intent intent = intents[i]; + NeededUriGrants intentGrants = null; // Refuse possible leaked file descriptors. if (intent.hasFileDescriptors()) { @@ -418,6 +420,14 @@ public class ActivityStartController { 0 /* startFlags */, null /* profilerInfo */, userId, filterCallingUid); aInfo = mService.mAmInternal.getActivityInfoForUser(aInfo, userId); + // Carefully collect grants without holding lock + if (aInfo != null) { + intentGrants = mSupervisor.mService.mUgmInternal + .checkGrantUriPermissionFromIntent(intent, filterCallingUid, + aInfo.applicationInfo.packageName, + UserHandle.getUserId(aInfo.applicationInfo.uid)); + } + if (aInfo != null) { if ((aInfo.applicationInfo.privateFlags & ApplicationInfo.PRIVATE_FLAG_CANT_SAVE_STATE) != 0) { @@ -433,6 +443,7 @@ public class ActivityStartController { ? options : null; starters[i] = obtainStarter(intent, reason) + .setIntentGrants(intentGrants) .setCaller(caller) .setResolvedType(resolvedTypes[i]) .setActivityInfo(aInfo) diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index 30779973b204..25842f58579d 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -2638,6 +2638,11 @@ class ActivityStarter { return mRequest.intent; } + ActivityStarter setIntentGrants(NeededUriGrants intentGrants) { + mRequest.intentGrants = intentGrants; + return this; + } + ActivityStarter setReason(String reason) { mRequest.reason = reason; return this; |