summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Philip P. Moltmann <moltmann@google.com> 2019-02-21 14:08:30 -0800
committer Philip P. Moltmann <moltmann@google.com> 2019-02-21 14:30:41 -0800
commit8277ab6fb2bb975f7d9982d64c2a929cb01e2b8a (patch)
tree9101c6a9601029b57a354b9be90350711991b010
parentc6e3a8e0623d8eeb980c8d5f0661c2018b149f0a (diff)
Do not revoke pre-M perms on upgrade
... just remove the REVOKE_ON_UPGRADE flag. Pre-M apps do not know how to ask for permissions. Hence only the user can revoke permissions as this is likely to break apps. Test: atest CtsPermissionTestCases:SplitPermissionsTest Change-Id: I4f7634985cb655f6b8f98ecf4261e1afcb4519de
-rw-r--r--services/core/java/com/android/server/pm/permission/PermissionManagerService.java31
1 files changed, 14 insertions, 17 deletions
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 6b449ff7750f..f9ba6da3f2a5 100644
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
@@ -1201,29 +1201,23 @@ public class PermissionManagerService {
if ((flags & FLAG_PERMISSION_REVOKE_WHEN_REQUESTED) != 0) {
BasePermission bp = mSettings.getPermissionLocked(permission);
- ps.updatePermissionFlags(bp, userId,
- FLAG_PERMISSION_REVOKE_WHEN_REQUESTED
- | FLAG_PERMISSION_USER_FIXED | FLAG_PERMISSION_USER_SET,
- 0);
- updatedUserIds = ArrayUtils.appendInt(updatedUserIds,
- userId);
+ int flagsToRemove = FLAG_PERMISSION_REVOKE_WHEN_REQUESTED;
if ((flags & (FLAG_PERMISSION_GRANTED_BY_DEFAULT
| FLAG_PERMISSION_POLICY_FIXED | FLAG_PERMISSION_SYSTEM_FIXED))
- == 0) {
- if (supportsRuntimePermissions) {
- int revokeResult = ps.revokeRuntimePermission(bp, userId);
- if (revokeResult != PERMISSION_OPERATION_FAILURE) {
- if (DEBUG_PERMISSIONS) {
- Slog.i(TAG, "Revoking runtime permission "
- + permission + " for " + pkgName
- + " as it is now requested");
- }
+ == 0 && supportsRuntimePermissions) {
+ int revokeResult = ps.revokeRuntimePermission(bp, userId);
+ if (revokeResult != PERMISSION_OPERATION_FAILURE) {
+ if (DEBUG_PERMISSIONS) {
+ Slog.i(TAG, "Revoking runtime permission "
+ + permission + " for " + pkgName
+ + " as it is now requested");
}
- } else {
- setAppOpMode(permission, pkg, userId, MODE_IGNORED);
}
+ flagsToRemove |=
+ FLAG_PERMISSION_USER_FIXED | FLAG_PERMISSION_USER_SET;
+
List<String> fgPerms = mBackgroundPermissions.get(permission);
if (fgPerms != null) {
int numFgPerms = fgPerms.size();
@@ -1241,6 +1235,9 @@ public class PermissionManagerService {
}
}
}
+
+ ps.updatePermissionFlags(bp, userId, flagsToRemove, 0);
+ updatedUserIds = ArrayUtils.appendInt(updatedUserIds, userId);
}
}
}