diff --git a/data/etc/platform.xml b/data/etc/platform.xml index 71fc29b04a803..e8eb4ac8f9a12 100644 --- a/data/etc/platform.xml +++ b/data/etc/platform.xml @@ -205,9 +205,6 @@ - - - diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java index 34003c7f23412..1e92ca60ce2f9 100644 --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java @@ -422,19 +422,24 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsForSystemPackage(pm, userId, pkg); } - // Grant READ_PHONE_STATE to all system apps that have READ_PRIVILEGED_PHONE_STATE + // Re-grant READ_PHONE_STATE as non-fixed to all system apps that have + // READ_PRIVILEGED_PHONE_STATE and READ_PHONE_STATE granted -- this is to undo the fixed + // grant from R. for (PackageInfo pkg : packages) { if (pkg == null || !doesPackageSupportRuntimePermissions(pkg) || ArrayUtils.isEmpty(pkg.requestedPermissions) || !pm.isGranted(Manifest.permission.READ_PRIVILEGED_PHONE_STATE, - pkg, UserHandle.of(userId))) { + pkg, UserHandle.of(userId)) + || !pm.isGranted(Manifest.permission.READ_PHONE_STATE, pkg, + UserHandle.of(userId))) { continue; } - grantRuntimePermissions(pm, pkg, - Collections.singleton(Manifest.permission.READ_PHONE_STATE), - true, // systemFixed - userId); + + pm.updatePermissionFlags(Manifest.permission.READ_PHONE_STATE, pkg, + PackageManager.FLAG_PERMISSION_SYSTEM_FIXED, + 0, + UserHandle.of(userId)); } } @@ -1723,7 +1728,7 @@ final class DefaultPermissionGrantPolicy { int flagMask, int flagValues, @NonNull UserHandle user) { PermissionState state = getPermissionState(permission, pkg, user); state.initFlags(); - state.newFlags |= flagValues & flagMask; + state.newFlags = (state.newFlags & ~flagMask) | (flagValues & flagMask); } @Override