From c0681c019d9bc253078de37656f75b7edb88157a Mon Sep 17 00:00:00 2001 From: Ayush Sharma Date: Fri, 20 Aug 2021 22:20:42 +0000 Subject: [PATCH] Refactor permission checks removeActiveAdmin Reorder permissions checks to not leak information about a package if it's admin or not. Bug: 192369136 Test: atest DevicePolicyManagerTest#testRemoveActiveAdmin_SecurityException atest DevicePolicyManagerTest#testRemoveActiveAdmin_userNotRunningOrLocked atest DevicePolicyManagerTest#testRemoveActiveAdmin_fromDifferentUserWithINTERACT_ACROSS_USERS_FULL atest DevicePolicyManagerTest#testRemoveActiveAdmin_sameUserNoMANAGE_DEVICE_ADMINS atest DevicePolicyManagerTest#testRemoveActiveAdmin_multipleAdminsInUser atest DevicePolicyManagerTest#testSetDeviceOwner atest DevicePolicyManagerTest#testSetDeviceOwner_headlessSystemUserMode atest DevicePolicyManagerTest#testSetProfileOwner Change-Id: I132e09f680c06fb5068bdbe140c08cafcc13f102 Merged-In: I132e09f680c06fb5068bdbe140c08cafcc13f102 (cherry picked from commit 11d2fb77a19c9b53c825f4ab5fcd68054e097c06) --- .../server/devicepolicy/DevicePolicyManagerService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 147889db3177e..65bbdf599c509 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -3780,7 +3780,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } Preconditions.checkArgumentNonnegative(userHandle, "Invalid userId"); - final CallerIdentity caller = getCallerIdentity(); + final CallerIdentity caller = hasCallingOrSelfPermission(permission.MANAGE_DEVICE_ADMINS) + ? getCallerIdentity() : getCallerIdentity(adminReceiver); Preconditions.checkCallAuthorization(hasFullCrossUsersPermission(caller, userHandle)); checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_REMOVE_ACTIVE_ADMIN); enforceUserUnlocked(userHandle); @@ -3797,8 +3798,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { + adminReceiver); return; } - Preconditions.checkCallAuthorization(admin.getUid() == caller.getUid() - || hasCallingOrSelfPermission(permission.MANAGE_DEVICE_ADMINS)); + mInjector.binderWithCleanCallingIdentity(() -> removeActiveAdminLocked(adminReceiver, userHandle)); }