Relax restrictions on appop protection level

Added appop to the set of protection flags that can be used without
combining with a base protection of 'signature' or 'internal'.

Test: Builds, boots.

Bug: 179304245
Change-Id: Ifd7f925acdb560d966905f54603f68519311d9ad
This commit is contained in:
Suprabh Shukla
2021-02-03 15:54:53 -08:00
parent d8343be5ac
commit f7e44ca988

View File

@@ -108,17 +108,14 @@ public class ParsedPermissionUtils {
permission.protectionLevel = PermissionInfo.fixProtectionLevel(permission.protectionLevel);
if (permission.getProtectionFlags() != 0) {
if ((permission.protectionLevel & PermissionInfo.PROTECTION_FLAG_INSTANT) == 0
&& (permission.protectionLevel & PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY)
== 0
&& (permission.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
!= PermissionInfo.PROTECTION_SIGNATURE
&& (permission.protectionLevel & PermissionInfo.PROTECTION_MASK_BASE)
!= PermissionInfo.PROTECTION_INTERNAL) {
return input.error("<permission> protectionLevel specifies a non-instant flag "
+ "but is not based on signature or internal type");
}
final int otherProtectionFlags = permission.getProtectionFlags()
& ~(PermissionInfo.PROTECTION_FLAG_APPOP | PermissionInfo.PROTECTION_FLAG_INSTANT
| PermissionInfo.PROTECTION_FLAG_RUNTIME_ONLY);
if (otherProtectionFlags != 0
&& permission.getProtection() != PermissionInfo.PROTECTION_SIGNATURE
&& permission.getProtection() != PermissionInfo.PROTECTION_INTERNAL) {
return input.error("<permission> protectionLevel specifies a non-instant, non-appop,"
+ " non-runtimeOnly flag but is not based on signature or internal type");
}
return ComponentParseUtils.parseAllMetaData(pkg, res, parser, tag, permission, input);