diff options
| author | 2018-06-27 23:25:42 +0000 | |
|---|---|---|
| committer | 2018-06-27 23:25:42 +0000 | |
| commit | 3d38ba1f9bb53c3695a27f242feb28a3f5e56040 (patch) | |
| tree | 85b5ba3cc19872da8341935536096e1fce8b34a7 | |
| parent | 0c8cc417d596b9321a852a2f165684d9edaef1b9 (diff) | |
| parent | 0eda2602cd2830e479d96f125ca4783c0c6be26c (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.java | 24 |
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; |