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
This commit is contained in:
@@ -3786,7 +3786,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|
|||||||
}
|
}
|
||||||
Preconditions.checkArgumentNonnegative(userHandle, "Invalid userId");
|
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));
|
Preconditions.checkCallAuthorization(hasFullCrossUsersPermission(caller, userHandle));
|
||||||
checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_REMOVE_ACTIVE_ADMIN);
|
checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_REMOVE_ACTIVE_ADMIN);
|
||||||
enforceUserUnlocked(userHandle);
|
enforceUserUnlocked(userHandle);
|
||||||
@@ -3803,8 +3804,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
|
|||||||
+ adminReceiver);
|
+ adminReceiver);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Preconditions.checkCallAuthorization(admin.getUid() == caller.getUid()
|
|
||||||
|| hasCallingOrSelfPermission(permission.MANAGE_DEVICE_ADMINS));
|
|
||||||
mInjector.binderWithCleanCallingIdentity(() ->
|
mInjector.binderWithCleanCallingIdentity(() ->
|
||||||
removeActiveAdminLocked(adminReceiver, userHandle));
|
removeActiveAdminLocked(adminReceiver, userHandle));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user