Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccd654e9 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

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
parent 526b6422
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -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;
        }