From eb82d6594eea3d785fcac567bac2d349589fa793 Mon Sep 17 00:00:00 2001 From: "Philip P. Moltmann" Date: Tue, 26 Mar 2019 16:17:26 -0700 Subject: [PATCH] Do not grant already granted permission This is esp. necessary as we want to avoid to grant already grated system-fixed permissions. Fixes: 129354118 Test: Upgraded from P->Q Change-Id: Ifc8271e77a94545f995160402fd83867c404bb54 --- .../DefaultPermissionGrantPolicy.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java index 212df435adeaa..e6e2c76de829f 100644 --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java @@ -1089,6 +1089,8 @@ public final class DefaultPermissionGrantPolicy { private void grantRuntimePermissions(PackageInfo pkg, Set permissionsWithoutSplits, boolean systemFixed, boolean ignoreSystemPackage, int userId) { + UserHandle user = UserHandle.of(userId); + if (pkg == null) { return; } @@ -1109,7 +1111,14 @@ public final class DefaultPermissionGrantPolicy { } requestedPermissions = ArrayUtils.filterNotNull(requestedPermissions, String[]::new); - PackageManager pm = mContext.getPackageManager(); + PackageManager pm; + try { + pm = mContext.createPackageContextAsUser(mContext.getPackageName(), 0, + user).getPackageManager(); + } catch (NameNotFoundException doesNotHappen) { + throw new IllegalStateException(doesNotHappen); + } + final ArraySet permissions = new ArraySet<>(permissionsWithoutSplits); ApplicationInfo applicationInfo = pkg.applicationInfo; @@ -1187,7 +1196,6 @@ public final class DefaultPermissionGrantPolicy { } if (permissions.contains(permission)) { - UserHandle user = UserHandle.of(userId); final int flags = mContext.getPackageManager().getPermissionFlags( permission, pkg.packageName, user); @@ -1210,8 +1218,11 @@ public final class DefaultPermissionGrantPolicy { UserHandle.getAppId(pkg.applicationInfo.uid)); String op = AppOpsManager.permissionToOp(permission); - mContext.getPackageManager() - .grantRuntimePermission(pkg.packageName, permission, user); + if (pm.checkPermission(permission, pkg.packageName) + != PackageManager.PERMISSION_GRANTED) { + mContext.getPackageManager() + .grantRuntimePermission(pkg.packageName, permission, user); + } mContext.getPackageManager().updatePermissionFlags(permission, pkg.packageName, newFlags, newFlags, user);