From ccd654e9d4c38da0d652c442e7a2ca3f447e9abe Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Wed, 3 Sep 2014 17:48:47 -0700 Subject: [PATCH] Permission check for entering MODE_IN_CALL Make the ability to change the audio mode conditional to having the MODIFY_PHONE_STATE permission. Make AudioService's internal implementation of the mode setting (the setModeInt() method) private, it is only meant to be used by AudioService. Refer to the permission names through Manifest.permission, not by their string value. Bug 14964198 Change-Id: I49870207566e53d5c8764646cece06d8272f93ed --- media/java/android/media/AudioService.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index d15085bba088f..f09a51f02f377 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -1774,6 +1774,15 @@ public class AudioService extends IAudioService.Stub { return; } + if ( (mode == AudioSystem.MODE_IN_CALL) && + (mContext.checkCallingOrSelfPermission( + android.Manifest.permission.MODIFY_PHONE_STATE) + != PackageManager.PERMISSION_GRANTED)) { + Log.w(TAG, "MODIFY_PHONE_STATE Permission Denial: setMode(MODE_IN_CALL) from pid=" + + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()); + return; + } + if (mode < AudioSystem.MODE_CURRENT || mode >= AudioSystem.NUM_MODES) { return; } @@ -1795,7 +1804,7 @@ public class AudioService extends IAudioService.Stub { // must be called synchronized on mSetModeDeathHandlers // setModeInt() returns a valid PID if the audio mode was successfully set to // any mode other than NORMAL. - int setModeInt(int mode, IBinder cb, int pid) { + private int setModeInt(int mode, IBinder cb, int pid) { if (DEBUG_MODE) { Log.v(TAG, "setModeInt(mode=" + mode + ", pid=" + pid + ")"); } int newModeOwnerPid = 0; if (cb == null) { @@ -3055,7 +3064,7 @@ public class AudioService extends IAudioService.Stub { } boolean checkAudioSettingsPermission(String method) { - if (mContext.checkCallingOrSelfPermission("android.permission.MODIFY_AUDIO_SETTINGS") + if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS) == PackageManager.PERMISSION_GRANTED) { return true; }