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
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 730b22a..845563b 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 @@
// 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 @@
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 @@
}
}
builder.append(" to access user ");
+ builder.append(userId);
builder.append(".");
return builder.toString();
}