From d81f8270bec71ec9a569c8308c42cacd7aba0d23 Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Thu, 23 Jul 2015 17:15:45 -0700 Subject: [PATCH] Require permission for internal broadcast It was possible for other apps to request removal of the guest user that was handled by an internal receiver in SystemUI. Fix requires the broadcast sender to have an internal permission so that only SystemUI can send that broadcast (PendingIntent). Bug: 22671268 Change-Id: I63a8ced692e6d1cb2872b962ad247a827dbafbc6 --- packages/SystemUI/AndroidManifest.xml | 5 +++++ .../statusbar/policy/UserSwitcherController.java | 13 ++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index fea7f94b5aee1..bd583664ceee5 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -125,6 +125,11 @@ + + + + > mAdapters = new ArrayList<>(); @@ -94,10 +98,13 @@ public class UserSwitcherController { filter.addAction(Intent.ACTION_USER_INFO_CHANGED); filter.addAction(Intent.ACTION_USER_SWITCHED); filter.addAction(Intent.ACTION_USER_STOPPING); - filter.addAction(ACTION_REMOVE_GUEST); mContext.registerReceiverAsUser(mReceiver, UserHandle.OWNER, filter, null /* permission */, null /* scheduler */); + filter = new IntentFilter(); + filter.addAction(ACTION_REMOVE_GUEST); + mContext.registerReceiverAsUser(mReceiver, UserHandle.OWNER, filter, + PERMISSION_SELF, null /* scheduler */); mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(SIMPLE_USER_SWITCHER_GLOBAL_SETTING), true, @@ -366,8 +373,8 @@ public class UserSwitcherController { mContext.getString(R.string.guest_notification_remove_action), removeGuestPI) .build(); - NotificationManager.from(mContext).notifyAsUser(null, 0, notification, - new UserHandle(guestUserId)); + NotificationManager.from(mContext).notifyAsUser(TAG_REMOVE_GUEST, ID_REMOVE_GUEST, + notification, new UserHandle(guestUserId)); } };