Skip to content

Commit fb173a0

Browse files
kholoud mohamedanisassigoogle
authored andcommitted
Changed INTERACT_ACROSS_PROFILES appop to be set per UID
In some cases, enforceCrossUserOrProfilePermission fails for packages which have INTERACT_ACROSS_PROFILE appop granted if it shares the uid with another package that doesn't hold the permission, this is because getPackagesForUid is used to get the callingPackage which could return either packages randomly. I've changed setting the appop to be per uid instead of per package, Test: manual testing Bug: 183188804 Bug: 183730243 Bug: 195630721 Change-Id: I7a72c1d3abd1f83924865326797630ded2f2040f Merged-In: I7a72c1d3abd1f83924865326797630ded2f2040f (cherry picked from commit 4670d1d855a853852980148d99b190171db4ec79) (cherry picked from commit be1752c13f694de4d637870214e0124d43087302)
1 parent ee583fd commit fb173a0

1 file changed

Lines changed: 10 additions & 14 deletions

File tree

services/core/java/com/android/server/pm/CrossProfileAppsServiceImpl.java

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -475,16 +475,16 @@ private void setInteractAcrossProfilesAppOpForUserOrThrow(
475475
// this particular app-op to be modified without the broader app-op permissions.
476476
mInjector.withCleanCallingIdentity(() ->
477477
mInjector.getAppOpsManager()
478-
.setMode(OP_INTERACT_ACROSS_PROFILES, uid, packageName, newMode));
478+
.setUidMode(OP_INTERACT_ACROSS_PROFILES, uid, newMode));
479479
} else {
480480
mInjector.getAppOpsManager()
481-
.setMode(OP_INTERACT_ACROSS_PROFILES, uid, packageName, newMode);
481+
.setUidMode(OP_INTERACT_ACROSS_PROFILES, uid, newMode);
482482
}
483483
// Kill the UID before sending the broadcast to ensure that apps can be informed when
484484
// their app-op has been revoked.
485485
maybeKillUid(packageName, uid, hadPermission);
486-
sendCanInteractAcrossProfilesChangedBroadcast(packageName, uid, UserHandle.of(userId));
487-
maybeLogSetInteractAcrossProfilesAppOp(packageName, newMode, userId, logMetrics, uid);
486+
sendCanInteractAcrossProfilesChangedBroadcast(packageName, UserHandle.of(userId));
487+
maybeLogSetInteractAcrossProfilesAppOp(packageName, newMode, userId, logMetrics);
488488
}
489489

490490
/**
@@ -503,11 +503,7 @@ private void maybeKillUid(
503503
}
504504

505505
private void maybeLogSetInteractAcrossProfilesAppOp(
506-
String packageName,
507-
@Mode int newMode,
508-
@UserIdInt int userId,
509-
boolean logMetrics,
510-
int uid) {
506+
String packageName, @Mode int newMode, @UserIdInt int userId, boolean logMetrics) {
511507
if (!logMetrics) {
512508
return;
513509
}
@@ -519,7 +515,7 @@ private void maybeLogSetInteractAcrossProfilesAppOp(
519515
.createEvent(DevicePolicyEnums.SET_INTERACT_ACROSS_PROFILES_APP_OP)
520516
.setStrings(packageName)
521517
.setInt(newMode)
522-
.setBoolean(appDeclaresCrossProfileAttribute(uid))
518+
.setBoolean(appDeclaresCrossProfileAttribute(packageName))
523519
.write();
524520
}
525521

@@ -536,10 +532,10 @@ private boolean currentModeEquals(@Mode int otherMode, String packageName, int u
536532
}
537533

538534
private void sendCanInteractAcrossProfilesChangedBroadcast(
539-
String packageName, int uid, UserHandle userHandle) {
535+
String packageName, UserHandle userHandle) {
540536
final Intent intent =
541537
new Intent(ACTION_CAN_INTERACT_ACROSS_PROFILES_CHANGED).setPackage(packageName);
542-
if (appDeclaresCrossProfileAttribute(uid)) {
538+
if (appDeclaresCrossProfileAttribute(packageName)) {
543539
intent.addFlags(
544540
Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND | Intent.FLAG_RECEIVER_FOREGROUND);
545541
} else {
@@ -556,8 +552,8 @@ private List<ResolveInfo> findBroadcastReceiversForUser(Intent intent, UserHandl
556552
.queryBroadcastReceiversAsUser(intent, /* flags= */ 0, userHandle);
557553
}
558554

559-
private boolean appDeclaresCrossProfileAttribute(int uid) {
560-
return mInjector.getPackageManagerInternal().getPackage(uid).isCrossProfile();
555+
private boolean appDeclaresCrossProfileAttribute(String packageName) {
556+
return mInjector.getPackageManagerInternal().getPackage(packageName).isCrossProfile();
561557
}
562558

563559
@Override

0 commit comments

Comments
 (0)