diff options
| author | 2022-08-16 17:43:41 +0800 | |
|---|---|---|
| committer | 2022-08-17 08:44:39 +0000 | |
| commit | 91a53a8910568b81f6630a542d8e9998824e75f4 (patch) | |
| tree | 7fe658555255aa3bf438abbda697668e3a681141 | |
| parent | ef4a7f30902e37b8f212b5ead4a365c27e415848 (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.java | 15 |
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 */); }); } |