diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 3086b38cce089..cc6d51b45a8a0 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -18,6 +18,7 @@ package com.android.server.pm; import static android.Manifest.permission.DELETE_PACKAGES; import static android.Manifest.permission.INSTALL_PACKAGES; +import static android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS; import static android.Manifest.permission.READ_EXTERNAL_STORAGE; import static android.Manifest.permission.REQUEST_DELETE_PACKAGES; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; @@ -18475,6 +18476,14 @@ public class PackageManagerService extends IPackageManager.Stub callingUid == getPackageUid(mStorageManagerPackage, 0, callingUserId)) { return true; } + + // Allow caller having MANAGE_PROFILE_AND_DEVICE_OWNERS permission to silently + // uninstall for device owner provisioning. + if (checkUidPermission(MANAGE_PROFILE_AND_DEVICE_OWNERS, callingUid) + == PERMISSION_GRANTED) { + return true; + } + return false; }