From 5d5d5fdf28907b5a5e207ba6908f6ae287229fd0 Mon Sep 17 00:00:00 2001 From: Jackal Guo Date: Mon, 17 May 2021 17:19:16 +0800 Subject: [PATCH] Add the checking of the package installed state Unless the caller wants to query the UID or GID with certain flags and proper permission, we should only return the result within the current userId only. Bug: 186180067 Test: atest -p core/java/android/content/pm \ core/java/com/android/internal/content \ services/core/java/com/android/server/pm \ services/tests/servicestests/src/com/android/server/pm Change-Id: I3d7c35dc2b57037f1f8c74fcaa432481a03f7636 --- .../server/pm/PackageManagerService.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 730b22a333afc..845563ba7799d 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4212,11 +4212,11 @@ public class PackageManagerService extends IPackageManager.Stub // reader final AndroidPackage p = mPackages.get(packageName); if (p != null && AndroidPackageUtils.isMatchForSystemOnly(p, flags)) { - PackageSetting ps = getPackageSettingInternal(p.getPackageName(), callingUid); - if (shouldFilterApplicationLocked(ps, callingUid, userId)) { - return -1; + final PackageSetting ps = getPackageSettingInternal(p.getPackageName(), callingUid); + if (ps != null && ps.getInstalled(userId) + && !shouldFilterApplicationLocked(ps, callingUid, userId)) { + return UserHandle.getUid(userId, p.getUid()); } - return UserHandle.getUid(userId, p.getUid()); } if ((flags & MATCH_KNOWN_PACKAGES) != 0) { final PackageSetting ps = mSettings.getPackageLPr(packageName); @@ -7968,13 +7968,11 @@ public class PackageManagerService extends IPackageManager.Stub synchronized (mLock) { final AndroidPackage p = mPackages.get(packageName); if (p != null && AndroidPackageUtils.isMatchForSystemOnly(p, flags)) { - PackageSetting ps = getPackageSetting(p.getPackageName()); - if (shouldFilterApplicationLocked(ps, callingUid, userId)) { - return null; + final PackageSetting ps = getPackageSetting(p.getPackageName()); + if (ps != null && ps.getInstalled(userId) + && !shouldFilterApplicationLocked(ps, callingUid, userId)) { + return mPermissionManager.getGidsForUid(UserHandle.getUid(userId, ps.appId)); } - // TODO: Shouldn't this be checking for package installed state for userId and - // return null? - return mPermissionManager.getGidsForUid(UserHandle.getUid(userId, ps.appId)); } if ((flags & MATCH_KNOWN_PACKAGES) != 0) { final PackageSetting ps = mSettings.getPackageLPr(packageName); @@ -11589,6 +11587,7 @@ public class PackageManagerService extends IPackageManager.Stub } } builder.append(" to access user "); + builder.append(userId); builder.append("."); return builder.toString(); }