summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Atanas Kirilov <akirilov@google.com> 2018-06-27 23:25:42 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-06-27 23:25:42 +0000
commit3d38ba1f9bb53c3695a27f242feb28a3f5e56040 (patch)
tree85b5ba3cc19872da8341935536096e1fce8b34a7
parent0c8cc417d596b9321a852a2f165684d9edaef1b9 (diff)
parent0eda2602cd2830e479d96f125ca4783c0c6be26c (diff)
Merge changes from topic "am-8acf63d1-cfe0-4950-98c3-1d2367987749" into cw-f-dev
* changes: [automerger] RESTRICT AUTOMERGE: Backporting of b/77821568 am: 4bc1c2445c am: b9c3b099e4 am: 24d402096e [automerger] RESTRICT AUTOMERGE: Backporting of b/77821568 am: 4bc1c2445c am: b9c3b099e4 [automerger] RESTRICT AUTOMERGE: Backporting of b/77821568 am: 4bc1c2445c RESTRICT AUTOMERGE: Backporting of b/77821568
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java24
1 files changed, 22 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 e93bc2016974..dea11e9287d6 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -3823,13 +3823,25 @@ public class PackageManagerService extends IPackageManager.Stub {
*/
void enforceCrossUserPermission(int callingUid, int userId, boolean requireFullPermission,
boolean checkShell, String message) {
+ enforceCrossUserPermission(
+ callingUid,
+ userId,
+ requireFullPermission,
+ checkShell,
+ false,
+ message);
+ }
+
+ private void enforceCrossUserPermission(int callingUid, int userId,
+ boolean requireFullPermission, boolean checkShell,
+ boolean requirePermissionWhenSameUser, String message) {
if (userId < 0) {
throw new IllegalArgumentException("Invalid userId " + userId);
}
if (checkShell) {
enforceShellRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES, callingUid, userId);
}
- if (userId == UserHandle.getUserId(callingUid)) return;
+ if (!requirePermissionWhenSameUser && userId == UserHandle.getUserId(callingUid)) return;
if (callingUid != Process.SYSTEM_UID && callingUid != 0) {
if (requireFullPermission) {
mContext.enforceCallingOrSelfPermission(
@@ -6272,7 +6284,7 @@ public class PackageManagerService extends IPackageManager.Stub {
flags = updateFlagsForPackage(flags, userId, null);
final boolean listUninstalled = (flags & MATCH_UNINSTALLED_PACKAGES) != 0;
enforceCrossUserPermission(Binder.getCallingUid(), userId,
- true /* requireFullPermission */, false /* checkShell */,
+ false /* requireFullPermission */, false /* checkShell */,
"get installed packages");
// writer
@@ -6380,10 +6392,18 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public ParceledListSlice<ApplicationInfo> getInstalledApplications(int flags, int userId) {
+ final int callingUid = Binder.getCallingUid();
if (!sUserManager.exists(userId)) return ParceledListSlice.emptyList();
flags = updateFlagsForApplication(flags, userId, null);
final boolean listUninstalled = (flags & MATCH_UNINSTALLED_PACKAGES) != 0;
+ enforceCrossUserPermission(
+ callingUid,
+ userId,
+ false /* requireFullPermission */,
+ false /* checkShell */,
+ "get installed application info");
+
// writer
synchronized (mPackages) {
ArrayList<ApplicationInfo> list;