From d204005ac30a80607945cae89a7bd9ee6aa98452 Mon Sep 17 00:00:00 2001 From: Nikita Ioffe Date: Tue, 22 Jun 2021 18:11:17 +0100 Subject: [PATCH] Rename partner-apex-allowlist to vendor-apex-allowlist Also rename corresponding field and getter in SystemConfig.java, and add new ALLOW_VENDOR_APEX flag to control what partitions can specify allowed vendor APEXEs (so far: /product, /oem and /vendor). Bug: 189274479 Test: atest FrameworksServicesTests:SystemConfigTest Change-Id: I680090d7a1237cb95c1aa4ea3975c50d06b35fcc --- .../java/com/android/server/SystemConfig.java | 23 ++++++----- .../server/pm/PackageInstallerSession.java | 2 +- .../server/systemconfig/SystemConfigTest.java | 38 +++++++++---------- 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java index 6976ace36c115..a8dcbaffeeb51 100644 --- a/core/java/com/android/server/SystemConfig.java +++ b/core/java/com/android/server/SystemConfig.java @@ -86,6 +86,7 @@ public class SystemConfig { // and "allow-ignore-location-settings". private static final int ALLOW_OVERRIDE_APP_RESTRICTIONS = 0x100; private static final int ALLOW_IMPLICIT_BROADCASTS = 0x200; + private static final int ALLOW_VENDOR_APEX = 0x400; private static final int ALLOW_ALL = ~0; // property for runtime configuration differentiation @@ -240,7 +241,7 @@ public class SystemConfig { private final ArraySet mRollbackWhitelistedPackages = new ArraySet<>(); private final ArraySet mWhitelistedStagedInstallers = new ArraySet<>(); - private final ArraySet mAllowedPartnerApexes = new ArraySet<>(); + private final ArraySet mAllowedVendorApexes = new ArraySet<>(); /** * Map of system pre-defined, uniquely named actors; keys are namespace, @@ -411,8 +412,8 @@ public class SystemConfig { return mWhitelistedStagedInstallers; } - public Set getAllowedPartnerApexes() { - return mAllowedPartnerApexes; + public Set getAllowedVendorApexes() { + return mAllowedVendorApexes; } public ArraySet getAppDataIsolationWhitelistedApps() { @@ -489,7 +490,7 @@ public class SystemConfig { // Vendors are only allowed to customize these int vendorPermissionFlag = ALLOW_LIBS | ALLOW_FEATURES | ALLOW_PRIVAPP_PERMISSIONS - | ALLOW_ASSOCIATIONS; + | ALLOW_ASSOCIATIONS | ALLOW_VENDOR_APEX; if (Build.VERSION.DEVICE_INITIAL_SDK_INT <= Build.VERSION_CODES.O_MR1) { // For backward compatibility vendorPermissionFlag |= (ALLOW_PERMISSIONS | ALLOW_APP_CONFIGS); @@ -530,7 +531,8 @@ public class SystemConfig { } // Allow OEM to customize these - int oemPermissionFlag = ALLOW_FEATURES | ALLOW_OEM_PERMISSIONS | ALLOW_ASSOCIATIONS; + int oemPermissionFlag = ALLOW_FEATURES | ALLOW_OEM_PERMISSIONS | ALLOW_ASSOCIATIONS + | ALLOW_VENDOR_APEX; readPermissions(Environment.buildPath( Environment.getOemDirectory(), "etc", "sysconfig"), oemPermissionFlag); readPermissions(Environment.buildPath( @@ -541,7 +543,8 @@ public class SystemConfig { // the use of hidden APIs from the product partition. int productPermissionFlag = ALLOW_FEATURES | ALLOW_LIBS | ALLOW_PERMISSIONS | ALLOW_APP_CONFIGS | ALLOW_PRIVAPP_PERMISSIONS | ALLOW_HIDDENAPI_WHITELISTING - | ALLOW_ASSOCIATIONS | ALLOW_OVERRIDE_APP_RESTRICTIONS | ALLOW_IMPLICIT_BROADCASTS; + | ALLOW_ASSOCIATIONS | ALLOW_OVERRIDE_APP_RESTRICTIONS | ALLOW_IMPLICIT_BROADCASTS + | ALLOW_VENDOR_APEX; if (Build.VERSION.DEVICE_INITIAL_SDK_INT <= Build.VERSION_CODES.R) { // TODO(b/157393157): This must check product interface enforcement instead of // DEVICE_INITIAL_SDK_INT for the devices without product interface enforcement. @@ -668,6 +671,7 @@ public class SystemConfig { (permissionFlag & ALLOW_OVERRIDE_APP_RESTRICTIONS) != 0; final boolean allowImplicitBroadcasts = (permissionFlag & ALLOW_IMPLICIT_BROADCASTS) != 0; + final boolean allowVendorApex = (permissionFlag & ALLOW_VENDOR_APEX) != 0; while (true) { XmlUtils.nextElement(parser); if (parser.getEventType() == XmlPullParser.END_DOCUMENT) { @@ -1217,15 +1221,14 @@ public class SystemConfig { } XmlUtils.skipCurrentTag(parser); } break; - case "allowed-partner-apex": { - // TODO(b/189274479): should this be allowOemPermissions instead? - if (allowAppConfigs) { + case "allowed-vendor-apex": { + if (allowVendorApex) { String pkgName = parser.getAttributeValue(null, "package"); if (pkgName == null) { Slog.w(TAG, "<" + name + "> without package in " + permFile + " at " + parser.getPositionDescription()); } else { - mAllowedPartnerApexes.add(pkgName); + mAllowedVendorApexes.add(pkgName); } } else { logNotAllowedInPartition(name, permFile, parser); diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index c33130037027a..acc83cfd05b6d 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -2799,7 +2799,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { private boolean isApexUpdateAllowed(String apexPackageName) { return mPm.getModuleInfo(apexPackageName, 0) != null - || SystemConfig.getInstance().getAllowedPartnerApexes().contains(apexPackageName); + || SystemConfig.getInstance().getAllowedVendorApexes().contains(apexPackageName); } /** diff --git a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java index f880563e2880d..9044b27d49944 100644 --- a/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java +++ b/services/tests/servicestests/src/com/android/server/systemconfig/SystemConfigTest.java @@ -222,61 +222,61 @@ public class SystemConfigTest { } /** - * Tests that readPermissions works correctly with {@link SystemConfig#ALLOW_APP_CONFIGS} - * permission flag for the tag: {@code allowed-partner-apex}. + * Tests that readPermissions works correctly with {@link SystemConfig#ALLOW_VENDOR_APEX} + * permission flag for the tag: {@code allowed-vendor-apex}. */ @Test - public void readPermissions_allowAppConfigs_parsesPartnerApexAllowList() + public void readPermissions_allowVendorApex_parsesVendorApexAllowList() throws IOException { final String contents = "\n" - + " \n" + + " \n" + ""; final File folder = createTempSubfolder("folder"); - createTempFile(folder, "partner-apex-allowlist.xml", contents); + createTempFile(folder, "vendor-apex-allowlist.xml", contents); mSysConfig.readPermissions(folder, /* Grant all permission flags */ ~0); - assertThat(mSysConfig.getAllowedPartnerApexes()).containsExactly("com.android.apex1"); + assertThat(mSysConfig.getAllowedVendorApexes()).containsExactly("com.android.apex1"); } /** - * Tests that readPermissions works correctly with {@link SystemConfig#ALLOW_APP_CONFIGS} - * permission flag for the tag: {@code allowed-partner-apex}. + * Tests that readPermissions works correctly with {@link SystemConfig#ALLOW_VENDOR_APEX} + * permission flag for the tag: {@code allowed-vendor-apex}. */ @Test - public void readPermissions_allowAppConfigs_parsesPartnerApexAllowList_noPackage() + public void readPermissions_allowVendorApex_parsesVendorApexAllowList_noPackage() throws IOException { final String contents = "\n" - + " \n" + + " \n" + ""; final File folder = createTempSubfolder("folder"); - createTempFile(folder, "partner-apex-allowlist.xml", contents); + createTempFile(folder, "vendor-apex-allowlist.xml", contents); mSysConfig.readPermissions(folder, /* Grant all permission flags */ ~0); - assertThat(mSysConfig.getAllowedPartnerApexes()).isEmpty(); + assertThat(mSysConfig.getAllowedVendorApexes()).isEmpty(); } /** - * Tests that readPermissions works correctly without {@link SystemConfig#ALLOW_APP_CONFIGS} - * permission flag for the tag: {@code allowed-partner-apex}. + * Tests that readPermissions works correctly without {@link SystemConfig#ALLOW_VENDOR_APEX} + * permission flag for the tag: {@code allowed-oem-apex}. */ @Test - public void readPermissions_notAllowAppConfigs_doesNotParsePartnerApexAllowList() + public void readPermissions_notAllowVendorApex_doesNotParseVendorApexAllowList() throws IOException { final String contents = "\n" - + " \n" + + " \n" + ""; final File folder = createTempSubfolder("folder"); - createTempFile(folder, "partner-apex-allowlist.xml", contents); + createTempFile(folder, "vendor-apex-allowlist.xml", contents); - mSysConfig.readPermissions(folder, /* Grant all but ALLOW_APP_CONFIGS flag */ ~0x08); + mSysConfig.readPermissions(folder, /* Grant all but ALLOW_VENDOR_APEX flag */ ~0x400); - assertThat(mSysConfig.getAllowedPartnerApexes()).isEmpty(); + assertThat(mSysConfig.getAllowedVendorApexes()).isEmpty(); } /**