Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a26dfaef authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Automerger Merge Worker
Browse files

Merge "Check only if the app is installed on the other user for blob access."...

Merge "Check only if the app is installed on the other user for blob access." into sc-dev am: 2c6a28a5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14788767

Change-Id: Id9b126b0d53d8467719b58ae65de6574d270ae80
parents 4a7e7a61 2c6a28a5
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -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) {
        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) {