From e191ca0a7c18e6bfdabcd02aff4ddf86727c34c6 Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Fri, 30 Apr 2021 22:48:01 +0000 Subject: [PATCH] Filter package visibility in checkExistsAndEnforceCannotModifyImmutablyRestrictedPermission(). Bug: 186404356 Test: manual Change-Id: I2b7afbba024d27fd1cb3e21a4b5abcd1d212eada --- .../pm/permission/PermissionManagerService.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 2d1178a3f116d..0f23538081d23 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -1152,6 +1152,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { private boolean checkExistsAndEnforceCannotModifyImmutablyRestrictedPermission( @NonNull String permName) { + final String permissionPackageName; final boolean isImmutablyRestrictedPermission; synchronized (mLock) { final Permission bp = mRegistry.getPermission(permName); @@ -1159,15 +1160,25 @@ public class PermissionManagerService extends IPermissionManager.Stub { Slog.w(TAG, "No such permissions: " + permName); return false; } + permissionPackageName = bp.getPackageName(); isImmutablyRestrictedPermission = bp.isHardOrSoftRestricted() && bp.isImmutablyRestricted(); } + + final int callingUid = getCallingUid(); + final int callingUserId = UserHandle.getUserId(callingUid); + if (mPackageManagerInt.filterAppAccess(permissionPackageName, callingUid, callingUserId)) { + EventLog.writeEvent(0x534e4554, "186404356", callingUid, permName); + return false; + } + if (isImmutablyRestrictedPermission && mContext.checkCallingOrSelfPermission( Manifest.permission.WHITELIST_RESTRICTED_PERMISSIONS) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Cannot modify allowlisting of an immutably " + "restricted permission: " + permName); } + return true; }