From d030ce24c11cbd925cae94e8e88bb78e04ceab6e Mon Sep 17 00:00:00 2001 From: "Philip P. Moltmann" Date: Mon, 18 Feb 2019 21:05:48 -0800 Subject: [PATCH] Support revoke-when-requested with pre-M apps In this case the permission should not be revoked, but the app-op should be. Fixes: 124609307 Test: atest SplitPermissionTests Change-Id: I4e70b8f9ef1e01320adb55096437e82a058883db --- .../permission/PermissionManagerService.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 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 f56b98464cc3a..8df5a71de43e3 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -1181,11 +1181,9 @@ public class PermissionManagerService { @NonNull int[] updatedUserIds) { AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class); - if (pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M) { - return updatedUserIds; - } - String pkgName = pkg.packageName; + boolean supportsRuntimePermissions = pkg.applicationInfo.targetSdkVersion + >= Build.VERSION_CODES.M; int[] users = UserManagerService.getInstance().getUserIds(); int numUsers = users.length; @@ -1210,15 +1208,17 @@ public class PermissionManagerService { if ((flags & (FLAG_PERMISSION_GRANTED_BY_DEFAULT | FLAG_PERMISSION_POLICY_FIXED | FLAG_PERMISSION_SYSTEM_FIXED)) == 0) { - 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"); + 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"); + } } + } else { + setAppOpMode(permission, pkg, userId, MODE_IGNORED); } List fgPerms = mBackgroundPermissions.get(permission);