From 4d37486cef865ea189b0c360d5c92811e1f182c1 Mon Sep 17 00:00:00 2001 From: Song Pan Date: Wed, 4 Mar 2020 15:30:45 +0000 Subject: [PATCH] Add a new test API for getting the list of approved rule providers. This allows us to check the list in GTS tests. Bug: 145674131 Test: atest AppIntegrityManagerServiceImplTest Change-Id: I3cb9c8379061b4a57bc6ae714b2a29204d34fa0f --- api/test-current.txt | 1 + .../integrity/AppIntegrityManager.java | 19 +++++++++++++++++++ .../integrity/IAppIntegrityManager.aidl | 2 ++ .../AppIntegrityManagerServiceImpl.java | 6 ++++++ .../AppIntegrityManagerServiceImplTest.java | 7 +++++++ 5 files changed, 35 insertions(+) diff --git a/api/test-current.txt b/api/test-current.txt index a5f1f68b82ac7..66cd0fc7c128c 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -843,6 +843,7 @@ package android.content.integrity { method @NonNull public android.content.integrity.RuleSet getCurrentRuleSet(); method @NonNull public String getCurrentRuleSetProvider(); method @NonNull public String getCurrentRuleSetVersion(); + method @NonNull public java.util.List getWhitelistedRuleProviders(); method public void updateRuleSet(@NonNull android.content.integrity.RuleSet, @NonNull android.content.IntentSender); field public static final String EXTRA_STATUS = "android.content.integrity.extra.STATUS"; field public static final int STATUS_FAILURE = 1; // 0x1 diff --git a/core/java/android/content/integrity/AppIntegrityManager.java b/core/java/android/content/integrity/AppIntegrityManager.java index 9f95d4d75f6f7..2869abb53b370 100644 --- a/core/java/android/content/integrity/AppIntegrityManager.java +++ b/core/java/android/content/integrity/AppIntegrityManager.java @@ -25,6 +25,8 @@ import android.content.IntentSender; import android.content.pm.ParceledListSlice; import android.os.RemoteException; +import java.util.List; + /** * Class for pushing rules used to check the integrity of app installs. * @@ -121,4 +123,21 @@ public class AppIntegrityManager { throw e.rethrowAsRuntimeException(); } } + + /** + * Get the package names of all whitelisted rule providers. + * + *

Warning: this method is only used for tests. + * + * @hide + */ + @TestApi + @NonNull + public List getWhitelistedRuleProviders() { + try { + return mManager.getWhitelistedRuleProviders(); + } catch (RemoteException e) { + throw e.rethrowAsRuntimeException(); + } + } } diff --git a/core/java/android/content/integrity/IAppIntegrityManager.aidl b/core/java/android/content/integrity/IAppIntegrityManager.aidl index 4714ad7c79890..94197bb9ec17a 100644 --- a/core/java/android/content/integrity/IAppIntegrityManager.aidl +++ b/core/java/android/content/integrity/IAppIntegrityManager.aidl @@ -19,6 +19,7 @@ package android.content.integrity; import android.content.integrity.Rule; import android.content.IntentSender; import android.content.pm.ParceledListSlice; +import java.util.List; /** @hide */ interface IAppIntegrityManager { @@ -26,4 +27,5 @@ interface IAppIntegrityManager { String getCurrentRuleSetVersion(); String getCurrentRuleSetProvider(); ParceledListSlice getCurrentRules(); + List getWhitelistedRuleProviders(); } diff --git a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java index 6da0de13f6234..a463c4919cd77 100644 --- a/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java +++ b/services/core/java/com/android/server/integrity/AppIntegrityManagerServiceImpl.java @@ -50,6 +50,7 @@ import android.os.Binder; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; +import android.os.RemoteException; import android.os.UserHandle; import android.provider.Settings; import android.util.Slog; @@ -239,6 +240,11 @@ public class AppIntegrityManagerServiceImpl extends IAppIntegrityManager.Stub { return new ParceledListSlice<>(rules); } + @Override + public List getWhitelistedRuleProviders() throws RemoteException { + return getAllowedRuleProviders(); + } + private void handleIntegrityVerification(Intent intent) { int verificationId = intent.getIntExtra(EXTRA_VERIFICATION_ID, -1); diff --git a/services/tests/servicestests/src/com/android/server/integrity/AppIntegrityManagerServiceImplTest.java b/services/tests/servicestests/src/com/android/server/integrity/AppIntegrityManagerServiceImplTest.java index 3dd150479ddc3..96d342ca43add 100644 --- a/services/tests/servicestests/src/com/android/server/integrity/AppIntegrityManagerServiceImplTest.java +++ b/services/tests/servicestests/src/com/android/server/integrity/AppIntegrityManagerServiceImplTest.java @@ -474,6 +474,13 @@ public class AppIntegrityManagerServiceImplTest { assertThat(mService.getCurrentRules().getList()).containsExactly(rule); } + @Test + public void getWhitelistedRuleProviders() throws Exception { + whitelistUsAsRuleProvider(); + + assertThat(mService.getWhitelistedRuleProviders()).containsExactly(TEST_FRAMEWORK_PACKAGE); + } + private void whitelistUsAsRuleProvider() { Resources mockResources = mock(Resources.class); when(mockResources.getStringArray(R.array.config_integrityRuleProviderPackages))