From 0511ba506d30d0a517491a92eda8d001a441d557 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Mon, 25 Aug 2014 18:28:30 -0700 Subject: Do not persist and restore the media button event receiver Do not persist the media button event receiver. Do not restore the media button event receiver on behalf of the application that registered. Prevents reported vulnerability. Bug 15428797 Change-Id: I7ca3e7fccb165c55b23f471c00e0ed77436f7dc1 --- media/java/android/media/AudioService.java | 3 -- media/java/android/media/MediaFocusControl.java | 56 ------------------------- 2 files changed, 59 deletions(-) diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index 92474df..32631c9 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -745,9 +745,6 @@ public class AudioService extends IAudioService.Stub { // Broadcast vibrate settings broadcastVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER); broadcastVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION); - - // Restore the default media button receiver from the system settings - mMediaFocusControl.restoreMediaButtonReceiver(); } private int rescaleIndex(int index, int srcStream, int dstStream) { diff --git a/media/java/android/media/MediaFocusControl.java b/media/java/android/media/MediaFocusControl.java index 34008bb..5614eac 100644 --- a/media/java/android/media/MediaFocusControl.java +++ b/media/java/android/media/MediaFocusControl.java @@ -318,7 +318,6 @@ public class MediaFocusControl implements OnFinished { //========================================================================================== // event handler messages - private static final int MSG_PERSIST_MEDIABUTTONRECEIVER = 0; private static final int MSG_RCDISPLAY_CLEAR = 1; private static final int MSG_RCDISPLAY_UPDATE = 2; private static final int MSG_REEVALUATE_REMOTE = 3; @@ -359,9 +358,6 @@ public class MediaFocusControl implements OnFinished { @Override public void handleMessage(Message msg) { switch(msg.what) { - case MSG_PERSIST_MEDIABUTTONRECEIVER: - onHandlePersistMediaButtonReceiver( (ComponentName) msg.obj ); - break; case MSG_RCDISPLAY_CLEAR: onRcDisplayClear(); @@ -1427,47 +1423,7 @@ public class MediaFocusControl implements OnFinished { } } } - if (mRCStack.empty()) { - // no saved media button receiver - mEventHandler.sendMessage( - mEventHandler.obtainMessage(MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0, - null)); - } else if (oldTop != mRCStack.peek()) { - // the top of the stack has changed, save it in the system settings - // by posting a message to persist it; only do this however if it has - // a concrete component name (is not a transient registration) - RemoteControlStackEntry rcse = mRCStack.peek(); - if (rcse.mReceiverComponent != null) { - mEventHandler.sendMessage( - mEventHandler.obtainMessage(MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0, - rcse.mReceiverComponent)); - } - } - } - } - } - - /** - * Helper function: - * Restore remote control receiver from the system settings. - */ - protected void restoreMediaButtonReceiver() { - String receiverName = Settings.System.getStringForUser(mContentResolver, - Settings.System.MEDIA_BUTTON_RECEIVER, UserHandle.USER_CURRENT); - if ((null != receiverName) && !receiverName.isEmpty()) { - ComponentName eventReceiver = ComponentName.unflattenFromString(receiverName); - if (eventReceiver == null) { - // an invalid name was persisted - return; } - // construct a PendingIntent targeted to the restored component name - // for the media button and register it - Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); - // the associated intent will be handled by the component being registered - mediaButtonIntent.setComponent(eventReceiver); - PendingIntent pi = PendingIntent.getBroadcast(mContext, - 0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/); - registerMediaButtonIntent(pi, eventReceiver, null); } } @@ -1509,12 +1465,6 @@ public class MediaFocusControl implements OnFinished { } mRCStack.push(rcse); // rcse is never null - // post message to persist the default media button receiver - if (target != null) { - mEventHandler.sendMessage( mEventHandler.obtainMessage( - MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0, target/*obj*/) ); - } - // RC stack was modified return true; } @@ -1553,12 +1503,6 @@ public class MediaFocusControl implements OnFinished { return false; } - private void onHandlePersistMediaButtonReceiver(ComponentName receiver) { - Settings.System.putStringForUser(mContentResolver, - Settings.System.MEDIA_BUTTON_RECEIVER, - receiver == null ? "" : receiver.flattenToString(), - UserHandle.USER_CURRENT); - } //========================================================================================== // Remote control display / client -- cgit v1.1