From 3af08a79c085f31ffa2d494d8cd75e8ed61ccd99 Mon Sep 17 00:00:00 2001 From: Winson Chiu Date: Thu, 9 Mar 2023 22:42:46 +0000 Subject: [PATCH] Fix VerifyingSession disabled check Passes the verifierUser and updates the Computer APIs to take in a UserHandle to avoid future confusion of the ints. Bug: 272585343 Change-Id: I579ae2e8584f40ebb5fb695ea27fc4acd915da15 --- services/core/java/com/android/server/pm/Computer.java | 6 ++++-- .../core/java/com/android/server/pm/ComputerEngine.java | 8 +++++--- .../java/com/android/server/pm/PackageManagerService.java | 2 +- .../core/java/com/android/server/pm/VerifyingSession.java | 3 +-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/pm/Computer.java b/services/core/java/com/android/server/pm/Computer.java index c232b3698bc01..04509e8454263 100644 --- a/services/core/java/com/android/server/pm/Computer.java +++ b/services/core/java/com/android/server/pm/Computer.java @@ -41,6 +41,7 @@ import android.content.pm.SharedLibraryInfo; import android.content.pm.SigningDetails; import android.content.pm.UserInfo; import android.content.pm.VersionedPackage; +import android.os.UserHandle; import android.util.ArrayMap; import android.util.ArraySet; import android.util.Pair; @@ -519,14 +520,15 @@ public interface Computer extends PackageDataSnapshot { * returns false. */ boolean isComponentEffectivelyEnabled(@NonNull ComponentInfo componentInfo, - @UserIdInt int userId); + @NonNull UserHandle userHandle); /** * @return true if the runtime app user enabled state and the install-time app manifest enabled * state are both effectively enabled for the given app. Or if the app cannot be found, * returns false. */ - boolean isApplicationEffectivelyEnabled(@NonNull String packageName, @UserIdInt int userId); + boolean isApplicationEffectivelyEnabled(@NonNull String packageName, + @NonNull UserHandle userHandle); @Nullable KeySet getKeySetByAlias(@NonNull String packageName, @NonNull String alias); diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index 5984360a534c3..a025996a9adb9 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -5129,9 +5129,10 @@ public class ComputerEngine implements Computer { @Override public boolean isComponentEffectivelyEnabled(@NonNull ComponentInfo componentInfo, - @UserIdInt int userId) { + @NonNull UserHandle userHandle) { try { String packageName = componentInfo.packageName; + int userId = userHandle.getIdentifier(); int appEnabledSetting = mSettings.getApplicationEnabledSetting(packageName, userId); if (appEnabledSetting == COMPONENT_ENABLED_STATE_DEFAULT) { @@ -5154,9 +5155,10 @@ public class ComputerEngine implements Computer { @Override public boolean isApplicationEffectivelyEnabled(@NonNull String packageName, - @UserIdInt int userId) { + @NonNull UserHandle userHandle) { try { - int appEnabledSetting = mSettings.getApplicationEnabledSetting(packageName, userId); + int appEnabledSetting = mSettings.getApplicationEnabledSetting(packageName, + userHandle.getIdentifier()); if (appEnabledSetting == COMPONENT_ENABLED_STATE_DEFAULT) { final AndroidPackage pkg = getPackage(packageName); if (pkg == null) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index de5f0c4d523fe..fdb635dc4a4fa 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2569,7 +2569,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService if (best == null || cur.priority > best.priority) { if (computer.isComponentEffectivelyEnabled(cur.getComponentInfo(), - UserHandle.USER_SYSTEM)) { + UserHandle.SYSTEM)) { best = cur; } else { Slog.w(TAG, "Domain verification agent found but not enabled"); diff --git a/services/core/java/com/android/server/pm/VerifyingSession.java b/services/core/java/com/android/server/pm/VerifyingSession.java index 5b967ec20cd3c..f340f9374dd5d 100644 --- a/services/core/java/com/android/server/pm/VerifyingSession.java +++ b/services/core/java/com/android/server/pm/VerifyingSession.java @@ -26,7 +26,6 @@ import static android.content.pm.PackageManager.MATCH_DEBUG_TRIAGED_MISSING; import static android.content.pm.SigningDetails.SignatureSchemeVersion.SIGNING_BLOCK_V4; import static android.os.PowerWhitelistManager.REASON_PACKAGE_VERIFIER; import static android.os.PowerWhitelistManager.TEMPORARY_ALLOWLIST_TYPE_FOREGROUND_SERVICE_ALLOWED; -import static android.os.Process.SYSTEM_UID; import static android.os.Trace.TRACE_TAG_PACKAGE_MANAGER; import static com.android.server.pm.PackageManagerService.CHECK_PENDING_INTEGRITY_VERIFICATION; @@ -408,7 +407,7 @@ final class VerifyingSession { final int numRequiredVerifierPackages = requiredVerifierPackages.size(); for (int i = numRequiredVerifierPackages - 1; i >= 0; i--) { if (!snapshot.isApplicationEffectivelyEnabled(requiredVerifierPackages.get(i), - SYSTEM_UID)) { + verifierUser)) { Slog.w(TAG, "Required verifier: " + requiredVerifierPackages.get(i) + " is disabled"); requiredVerifierPackages.remove(i);