summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Rhed Jao <rhedjao@google.com> 2022-08-16 17:43:41 +0800
committer Rhed Jao <rhedjao@google.com> 2022-08-17 08:44:39 +0000
commit91a53a8910568b81f6630a542d8e9998824e75f4 (patch)
tree7fe658555255aa3bf438abbda697668e3a681141
parentef4a7f30902e37b8f212b5ead4a365c27e415848 (diff)
Applying package visibility rules to the broadcast of overlay changed
The broadcast intent ACTION_OVERLAY_CHANGED reveals existence information of packages in the device. This cl passes an allowed list to exclude illegitimate receivers for the target package when broadcasting the intent. Bug: 238299601 Test: atest AppEnumerationTests Change-Id: Ia69ff3b5a652066609ffe690a8ab8ab2ad8ea445
-rw-r--r--services/core/java/com/android/server/om/OverlayManagerService.java15
1 files changed, 9 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java
index 715967369ffb..51b36dd9c579 100644
--- a/services/core/java/com/android/server/om/OverlayManagerService.java
+++ b/services/core/java/com/android/server/om/OverlayManagerService.java
@@ -39,6 +39,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
+import android.app.ActivityManagerInternal;
import android.app.IActivityManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -1416,16 +1417,18 @@ public final class OverlayManagerService extends SystemService {
private static void broadcastActionOverlayChanged(@NonNull final Set<String> targetPackages,
final int userId) {
+ final PackageManagerInternal pmInternal =
+ LocalServices.getService(PackageManagerInternal.class);
+ final ActivityManagerInternal amInternal =
+ LocalServices.getService(ActivityManagerInternal.class);
CollectionUtils.forEach(targetPackages, target -> {
final Intent intent = new Intent(ACTION_OVERLAY_CHANGED,
Uri.fromParts("package", target, null));
intent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
- try {
- ActivityManager.getService().broadcastIntent(null, intent, null, null, 0, null,
- null, null, android.app.AppOpsManager.OP_NONE, null, false, false, userId);
- } catch (RemoteException e) {
- Slog.e(TAG, "broadcastActionOverlayChanged remote exception", e);
- }
+ final int[] allowList = pmInternal.getVisibilityAllowList(target, userId);
+ amInternal.broadcastIntent(intent, null /* resultTo */, null /* requiredPermissions */,
+ false /* serialized */, userId, allowList, null /* filterExtrasForReceiver */,
+ null /* bOptions */);
});
}