From 9680f394daf3ca3269af88c0bd93d6ad13093b61 Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Mon, 22 Mar 2021 05:19:24 +0000 Subject: [PATCH] Fix revokePermissionsNoLongerImplicitLocked() for shared UIDs. The method should have considered all the packages in a shared UID, but it only took the package passed in into consideration, and would incorrectly revoke permissions that's implicit from another package in the same UID. The proper way is to always consider permission state by UID, but as a simple fix, considering each package only by their requested permissions works the same. The revocation of permissions no longer requested is handled elsewhere and involves removing the entire permission state, so it's also safe to only consider requested permissions here. Bug: 183304624 Test: manual Change-Id: I26b4bd7007cfed662c56628723e4be2718093880 --- .../android/server/pm/permission/PermissionManagerService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 616058fc25627..3bb5c1694734b 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -2937,7 +2937,8 @@ public class PermissionManagerService extends IPermissionManager.Stub { >= Build.VERSION_CODES.M; for (String permission : ps.getGrantedPermissions()) { - if (!pkg.getImplicitPermissions().contains(permission)) { + if (pkg.getRequestedPermissions().contains(permission) + && !pkg.getImplicitPermissions().contains(permission)) { Permission bp = mRegistry.getPermission(permission); if (bp != null && bp.isRuntime()) { int flags = ps.getPermissionFlags(permission);