summaryrefslogtreecommitdiff
path: root/apex/blobstore
diff options
context:
space:
mode:
authorSudheer Shanka <sudheersai@google.com>2021-06-03 22:31:50 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-06-03 22:31:50 +0000
commit2c6a28a5eabb12af758209307bbf1f06b99815ee (patch)
tree292e95d6e4a20ba15d4b3d9bff7ce72b17d41559 /apex/blobstore
parent08ad40f2d90c089950ead4cdf33a1e54fbccbb57 (diff)
parentb395a4d49816b14e581283c24bc4d70ad6edc226 (diff)
Merge "Check only if the app is installed on the other user for blob access." into sc-dev
Diffstat (limited to 'apex/blobstore')
-rw-r--r--apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java24
1 files changed, 21 insertions, 3 deletions
diff --git a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
index 300b50984c6c..7638f059b47e 100644
--- a/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
+++ b/apex/blobstore/service/java/com/android/server/blob/BlobMetadata.java
@@ -50,6 +50,7 @@ import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.ResourceId;
import android.content.res.Resources;
+import android.os.Binder;
import android.os.ParcelFileDescriptor;
import android.os.RevocableFileDescriptor;
import android.os.UserHandle;
@@ -308,7 +309,7 @@ class BlobMetadata {
if (callingUserId == committerUserId) {
continue;
}
- if (!checkCallerCanAccessBlobsAcrossUsers(callingPackage, committerUserId)) {
+ if (!isPackageInstalledOnUser(callingPackage, committerUserId)) {
continue;
}
@@ -326,8 +327,25 @@ class BlobMetadata {
private static boolean checkCallerCanAccessBlobsAcrossUsers(
String callingPackage, int callingUserId) {
- return PermissionManager.checkPackageNamePermission(ACCESS_BLOBS_ACROSS_USERS,
- callingPackage, callingUserId) == PackageManager.PERMISSION_GRANTED;
+ final long token = Binder.clearCallingIdentity();
+ try {
+ return PermissionManager.checkPackageNamePermission(ACCESS_BLOBS_ACROSS_USERS,
+ callingPackage, callingUserId) == PackageManager.PERMISSION_GRANTED;
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ private boolean isPackageInstalledOnUser(String packageName, int userId) {
+ final long token = Binder.clearCallingIdentity();
+ try {
+ mContext.getPackageManager().getPackageInfoAsUser(packageName, 0, userId);
+ return true;
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
boolean hasACommitterOrLeaseeInUser(int userId) {