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

Commit e595ce17 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: Ib68d1d2d3c034bd92540e7d69da468ac4b534dca
parents 6feb5cdf 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) {