Fix PackageInfo not being queried per user

Currently PackageInfo is always queried using user0. Changes the call to
use the calling userId instead.

Bug: 272375437
Test: atest --user-type secondary_user_on_secondary_display android.accounts.cts
Change-Id: Ia7440a2be4b59317b656fa8abba2a08113beedc3
This commit is contained in:
Eric Chiang
2023-04-17 13:18:02 -07:00
parent c2b50738a6
commit d33e27f8aa

View File

@@ -3018,7 +3018,7 @@ public class AccountManagerService
final long identityToken = clearCallingIdentity();
try {
// Distill the caller's package signatures into a single digest.
final byte[] callerPkgSigDigest = calculatePackageSignatureDigest(callerPkg);
final byte[] callerPkgSigDigest = calculatePackageSignatureDigest(callerPkg, userId);
// if the caller has permission, do the peek. otherwise go the more expensive
// route of starting a Session
@@ -3182,12 +3182,12 @@ public class AccountManagerService
.write();
}
private byte[] calculatePackageSignatureDigest(String callerPkg) {
private byte[] calculatePackageSignatureDigest(String callerPkg, int userId) {
MessageDigest digester;
try {
digester = MessageDigest.getInstance("SHA-256");
PackageInfo pkgInfo = mPackageManager.getPackageInfo(
callerPkg, PackageManager.GET_SIGNATURES);
PackageInfo pkgInfo = mPackageManager.getPackageInfoAsUser(
callerPkg, PackageManager.GET_SIGNATURES, userId);
for (Signature sig : pkgInfo.signatures) {
digester.update(sig.toByteArray());
}