diff options
author | Sudheer Shanka <sudheersai@google.com> | 2019-05-20 16:54:59 -0700 |
---|---|---|
committer | Sudheer Shanka <sudheersai@google.com> | 2019-05-21 10:21:43 -0700 |
commit | 1b817f65dbfac34119ef6346e1fc7a34be4900d7 (patch) | |
tree | 3d8a396170c42b8bee52409e693687c0f0dc657d /services | |
parent | b92f0771dc495402d0fcefb76e5eb2e47e8431d2 (diff) |
Don't use linked mediastore uris in DownloadProvider operations.
When MediaProvider db gets recreated, all the media content ids
get renumbered. It's possible that when DownloadProvider is
trying to delete an entry, it is holding onto a invalid mediastore
uri. So, don't use linked mediastore uris in DownloadProvider
operations. Also, revoke any prior uri grants of media content from
DownloadStorageProvider.
Bug: 132087334
Test: manual
Test: atest DownloadProviderTests
Test: atest cts/tests/app/src/android/app/cts/DownloadManagerTest.java
Test: atest cts/tests/app/DownloadManagerLegacyTest/src/android/app/cts/DownloadManagerLegacyTest.java
Test: atest cts/tests/app/DownloadManagerApi28Test/src/android/app/cts/DownloadManagerApi28Test.java
Test: atest cts/hostsidetests/appsecurity/src/android/appsecurity/cts/AppSecurityTests.java
Change-Id: I4885f5a0ae0b3ab660426605a8a43b8c1d66a4c7
Diffstat (limited to 'services')
-rw-r--r-- | services/art-profile | 2 | ||||
-rw-r--r-- | services/core/java/com/android/server/uri/UriGrantsManagerService.java | 12 |
2 files changed, 8 insertions, 6 deletions
diff --git a/services/art-profile b/services/art-profile index cf0f13cec21b..a9d5982d0d90 100644 --- a/services/art-profile +++ b/services/art-profile @@ -13532,7 +13532,7 @@ HSPLcom/android/server/uri/UriGrantsManagerService;->checkHoldingPermissionsInte HSPLcom/android/server/uri/UriGrantsManagerService;->checkUriPermission(Lcom/android/server/uri/GrantUri;II)Z HSPLcom/android/server/uri/UriGrantsManagerService;->enforceNotIsolatedCaller(Ljava/lang/String;)V HSPLcom/android/server/uri/UriGrantsManagerService;->findOrCreateUriPermission(Ljava/lang/String;Ljava/lang/String;ILcom/android/server/uri/GrantUri;)Lcom/android/server/uri/UriPermission; -PLcom/android/server/uri/UriGrantsManagerService;->getPersistedUriPermissions(Ljava/lang/String;Z)Landroid/content/pm/ParceledListSlice; +PLcom/android/server/uri/UriGrantsManagerService;->getPersistedUriPermissions(Ljava/lang/String;ZZ)Landroid/content/pm/ParceledListSlice; HSPLcom/android/server/uri/UriGrantsManagerService;->getProviderInfo(Ljava/lang/String;II)Landroid/content/pm/ProviderInfo; HSPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermission(ILjava/lang/String;Lcom/android/server/uri/GrantUri;ILcom/android/server/uri/UriPermissionOwner;I)V HSPLcom/android/server/uri/UriGrantsManagerService;->grantUriPermissionFromIntent(ILjava/lang/String;Landroid/content/Intent;Lcom/android/server/uri/UriPermissionOwner;I)V diff --git a/services/core/java/com/android/server/uri/UriGrantsManagerService.java b/services/core/java/com/android/server/uri/UriGrantsManagerService.java index 332df956d0fb..8b332d271a3a 100644 --- a/services/core/java/com/android/server/uri/UriGrantsManagerService.java +++ b/services/core/java/com/android/server/uri/UriGrantsManagerService.java @@ -211,9 +211,9 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub { } @Override - public ParceledListSlice<android.content.UriPermission> getPersistedUriPermissions( - String packageName, boolean incoming) { - enforceNotIsolatedCaller("getPersistedUriPermissions"); + public ParceledListSlice<android.content.UriPermission> getUriPermissions( + String packageName, boolean incoming, boolean persistedOnly) { + enforceNotIsolatedCaller("getUriPermissions"); Preconditions.checkNotNull(packageName, "packageName"); final int callingUid = Binder.getCallingUid(); @@ -240,7 +240,8 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub { } else { for (int j = 0; j < perms.size(); j++) { final UriPermission perm = perms.valueAt(j); - if (packageName.equals(perm.targetPkg) && perm.persistedModeFlags != 0) { + if (packageName.equals(perm.targetPkg) + && (!persistedOnly || perm.persistedModeFlags != 0)) { result.add(perm.buildPersistedPublicApiObject()); } } @@ -252,7 +253,8 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub { mGrantedUriPermissions.valueAt(i); for (int j = 0; j < perms.size(); j++) { final UriPermission perm = perms.valueAt(j); - if (packageName.equals(perm.sourcePkg) && perm.persistedModeFlags != 0) { + if (packageName.equals(perm.sourcePkg) + && (!persistedOnly || perm.persistedModeFlags != 0)) { result.add(perm.buildPersistedPublicApiObject()); } } |