From a925a8a4766409b729ab5faeaeae5ea82d973e0a Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Mon, 30 Jan 2023 18:45:51 +0000 Subject: [PATCH] Fix sufficient verifiers. Bug: 267186415 Test: presubmit Change-Id: I1c8a09f45af281c582d7fca95498fbc392f4bcb1 --- .../java/com/android/server/pm/PackageManagerService.java | 8 ++++++-- .../com/android/server/pm/PackageVerificationState.java | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 620ee37ef59bc..a02a4197bdea7 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6205,8 +6205,12 @@ public class PackageManagerService implements PackageSender, TestUtilityService mHandler.post(() -> { final int id = verificationId >= 0 ? verificationId : -verificationId; final PackageVerificationState state = mPendingVerification.get(id); - if (state == null || !state.checkRequiredVerifierUid(callingUid)) { - // Only allow calls from required verifiers. + if (state == null) { + return; + } + if (!state.checkRequiredVerifierUid(callingUid) + && !state.checkSufficientVerifierUid(callingUid)) { + // Only allow calls from verifiers. return; } diff --git a/services/core/java/com/android/server/pm/PackageVerificationState.java b/services/core/java/com/android/server/pm/PackageVerificationState.java index 8acdb0e475226..929bc1e0b3c42 100644 --- a/services/core/java/com/android/server/pm/PackageVerificationState.java +++ b/services/core/java/com/android/server/pm/PackageVerificationState.java @@ -83,6 +83,11 @@ class PackageVerificationState { mSufficientVerifierUids.put(uid, true); } + /** Returns true if the uid a sufficient verifier. */ + boolean checkSufficientVerifierUid(int uid) { + return mSufficientVerifierUids.get(uid, false); + } + /** * Should be called when a verification is received from an agent so the state of the package * verification can be tracked.