Merge "Backporting of b/77821568" into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
9774459633
@@ -4473,7 +4473,9 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
triaged = false;
|
triaged = false;
|
||||||
}
|
}
|
||||||
if ((flags & PackageManager.MATCH_ANY_USER) != 0) {
|
if ((flags & PackageManager.MATCH_ANY_USER) != 0) {
|
||||||
enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false,
|
// require the permission to be held; the calling uid and given user id referring
|
||||||
|
// to the same user is not sufficient
|
||||||
|
enforceCrossUserPermission(Binder.getCallingUid(), userId, false, false, true,
|
||||||
"MATCH_ANY_USER flag requires INTERACT_ACROSS_USERS permission at "
|
"MATCH_ANY_USER flag requires INTERACT_ACROSS_USERS permission at "
|
||||||
+ Debug.getCallers(5));
|
+ Debug.getCallers(5));
|
||||||
} else if ((flags & PackageManager.MATCH_UNINSTALLED_PACKAGES) != 0 && isCallerSystemUser
|
} else if ((flags & PackageManager.MATCH_UNINSTALLED_PACKAGES) != 0 && isCallerSystemUser
|
||||||
@@ -5126,13 +5128,25 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
*/
|
*/
|
||||||
void enforceCrossUserPermission(int callingUid, int userId, boolean requireFullPermission,
|
void enforceCrossUserPermission(int callingUid, int userId, boolean requireFullPermission,
|
||||||
boolean checkShell, String message) {
|
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) {
|
if (userId < 0) {
|
||||||
throw new IllegalArgumentException("Invalid userId " + userId);
|
throw new IllegalArgumentException("Invalid userId " + userId);
|
||||||
}
|
}
|
||||||
if (checkShell) {
|
if (checkShell) {
|
||||||
enforceShellRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES, callingUid, userId);
|
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 (callingUid != Process.SYSTEM_UID && callingUid != 0) {
|
||||||
if (requireFullPermission) {
|
if (requireFullPermission) {
|
||||||
mContext.enforceCallingOrSelfPermission(
|
mContext.enforceCallingOrSelfPermission(
|
||||||
@@ -8194,7 +8208,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
flags = updateFlagsForPackage(flags, userId, null);
|
flags = updateFlagsForPackage(flags, userId, null);
|
||||||
final boolean listUninstalled = (flags & MATCH_KNOWN_PACKAGES) != 0;
|
final boolean listUninstalled = (flags & MATCH_KNOWN_PACKAGES) != 0;
|
||||||
enforceCrossUserPermission(callingUid, userId,
|
enforceCrossUserPermission(callingUid, userId,
|
||||||
true /* requireFullPermission */, false /* checkShell */,
|
false /* requireFullPermission */, false /* checkShell */,
|
||||||
"get installed packages");
|
"get installed packages");
|
||||||
|
|
||||||
// writer
|
// writer
|
||||||
@@ -8318,6 +8332,13 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
flags = updateFlagsForApplication(flags, userId, null);
|
flags = updateFlagsForApplication(flags, userId, null);
|
||||||
final boolean listUninstalled = (flags & MATCH_KNOWN_PACKAGES) != 0;
|
final boolean listUninstalled = (flags & MATCH_KNOWN_PACKAGES) != 0;
|
||||||
|
|
||||||
|
enforceCrossUserPermission(
|
||||||
|
callingUid,
|
||||||
|
userId,
|
||||||
|
false /* requireFullPermission */,
|
||||||
|
false /* checkShell */,
|
||||||
|
"get installed application info");
|
||||||
|
|
||||||
// writer
|
// writer
|
||||||
synchronized (mPackages) {
|
synchronized (mPackages) {
|
||||||
ArrayList<ApplicationInfo> list;
|
ArrayList<ApplicationInfo> list;
|
||||||
|
|||||||
Reference in New Issue
Block a user