Revoke permission on non-runtime -> runtime upgrade

Not only on normal -> runtime.

Test: atest PermissionEscalationTest
Bug: 154505240, 168319670
Change-Id: If3b420067b4d7111dcf67ae6f98e42176158b679
Merged-In: If3b420067b4d7111dcf67ae6f98e42176158b679
This commit is contained in:
Philip P. Moltmann
2020-11-03 15:12:44 -08:00
parent 84c1247a7e
commit 33e24c883c

View File

@@ -367,7 +367,7 @@ public final class BasePermission {
if (bp == null) { if (bp == null) {
bp = new BasePermission(p.getName(), p.getPackageName(), TYPE_NORMAL); bp = new BasePermission(p.getName(), p.getPackageName(), TYPE_NORMAL);
} }
boolean wasNormal = bp.isNormal(); boolean wasNonRuntime = !bp.isRuntime();
StringBuilder r = null; StringBuilder r = null;
if (bp.perm == null) { if (bp.perm == null) {
if (bp.sourcePackageName == null if (bp.sourcePackageName == null
@@ -411,7 +411,7 @@ public final class BasePermission {
&& Objects.equals(bp.perm.getName(), p.getName())) { && Objects.equals(bp.perm.getName(), p.getName())) {
bp.protectionLevel = p.getProtectionLevel(); bp.protectionLevel = p.getProtectionLevel();
} }
if (bp.isRuntime() && (ownerChanged || wasNormal)) { if (bp.isRuntime() && (ownerChanged || wasNonRuntime)) {
// If this is a runtime permission and the owner has changed, or this was a normal // If this is a runtime permission and the owner has changed, or this was a normal
// permission, then permission state should be cleaned up // permission, then permission state should be cleaned up
bp.mPermissionDefinitionChanged = true; bp.mPermissionDefinitionChanged = true;