Merge "AudioService: fix permission check on volume control" into sc-qpr1-dev am: 50d7e14c25

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15897410

Change-Id: I8508f8507e3b28c06584517ecaed0d791a681846
This commit is contained in:
Eric Laurent
2021-09-28 16:53:28 +00:00
committed by Automerger Merge Worker

View File

@@ -2596,18 +2596,19 @@ public class AudioService extends IAudioService.Stub
case KeyEvent.KEYCODE_VOLUME_UP: case KeyEvent.KEYCODE_VOLUME_UP:
adjustSuggestedStreamVolume(AudioManager.ADJUST_RAISE, adjustSuggestedStreamVolume(AudioManager.ADJUST_RAISE,
AudioManager.USE_DEFAULT_STREAM_TYPE, flags, callingPackage, caller, AudioManager.USE_DEFAULT_STREAM_TYPE, flags, callingPackage, caller,
Binder.getCallingUid(), true, keyEventMode); Binder.getCallingUid(), Binder.getCallingPid(), true, keyEventMode);
break; break;
case KeyEvent.KEYCODE_VOLUME_DOWN: case KeyEvent.KEYCODE_VOLUME_DOWN:
adjustSuggestedStreamVolume(AudioManager.ADJUST_LOWER, adjustSuggestedStreamVolume(AudioManager.ADJUST_LOWER,
AudioManager.USE_DEFAULT_STREAM_TYPE, flags, callingPackage, caller, AudioManager.USE_DEFAULT_STREAM_TYPE, flags, callingPackage, caller,
Binder.getCallingUid(), true, keyEventMode); Binder.getCallingUid(), Binder.getCallingPid(), true, keyEventMode);
break; break;
case KeyEvent.KEYCODE_VOLUME_MUTE: case KeyEvent.KEYCODE_VOLUME_MUTE:
if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {
adjustSuggestedStreamVolume(AudioManager.ADJUST_TOGGLE_MUTE, adjustSuggestedStreamVolume(AudioManager.ADJUST_TOGGLE_MUTE,
AudioManager.USE_DEFAULT_STREAM_TYPE, flags, callingPackage, caller, AudioManager.USE_DEFAULT_STREAM_TYPE, flags, callingPackage, caller,
Binder.getCallingUid(), true, VOL_ADJUST_NORMAL); Binder.getCallingUid(), Binder.getCallingPid(),
true, VOL_ADJUST_NORMAL);
} }
break; break;
default: default:
@@ -2620,8 +2621,8 @@ public class AudioService extends IAudioService.Stub
public void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags, public void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags,
String callingPackage, String caller) { String callingPackage, String caller) {
adjustSuggestedStreamVolume(direction, suggestedStreamType, flags, callingPackage, adjustSuggestedStreamVolume(direction, suggestedStreamType, flags, callingPackage,
caller, Binder.getCallingUid(), callingHasAudioSettingsPermission(), caller, Binder.getCallingUid(), Binder.getCallingPid(),
VOL_ADJUST_NORMAL); callingHasAudioSettingsPermission(), VOL_ADJUST_NORMAL);
} }
public void setNavigationRepeatSoundEffectsEnabled(boolean enabled) { public void setNavigationRepeatSoundEffectsEnabled(boolean enabled) {
@@ -2647,7 +2648,7 @@ public class AudioService extends IAudioService.Stub
} }
private void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags, private void adjustSuggestedStreamVolume(int direction, int suggestedStreamType, int flags,
String callingPackage, String caller, int uid, boolean hasModifyAudioSettings, String callingPackage, String caller, int uid, int pid, boolean hasModifyAudioSettings,
int keyEventMode) { int keyEventMode) {
if (DEBUG_VOL) Log.d(TAG, "adjustSuggestedStreamVolume() stream=" + suggestedStreamType if (DEBUG_VOL) Log.d(TAG, "adjustSuggestedStreamVolume() stream=" + suggestedStreamType
+ ", flags=" + flags + ", caller=" + caller + ", flags=" + flags + ", caller=" + caller
@@ -2720,7 +2721,7 @@ public class AudioService extends IAudioService.Stub
if (DEBUG_VOL) Log.d(TAG, "Volume controller suppressed adjustment"); if (DEBUG_VOL) Log.d(TAG, "Volume controller suppressed adjustment");
} }
adjustStreamVolume(streamType, direction, flags, callingPackage, caller, uid, adjustStreamVolume(streamType, direction, flags, callingPackage, caller, uid, pid,
hasModifyAudioSettings, keyEventMode); hasModifyAudioSettings, keyEventMode);
} }
@@ -2752,12 +2753,12 @@ public class AudioService extends IAudioService.Stub
sVolumeLogger.log(new VolumeEvent(VolumeEvent.VOL_ADJUST_STREAM_VOL, streamType, sVolumeLogger.log(new VolumeEvent(VolumeEvent.VOL_ADJUST_STREAM_VOL, streamType,
direction/*val1*/, flags/*val2*/, callingPackage)); direction/*val1*/, flags/*val2*/, callingPackage));
adjustStreamVolume(streamType, direction, flags, callingPackage, callingPackage, adjustStreamVolume(streamType, direction, flags, callingPackage, callingPackage,
Binder.getCallingUid(), callingHasAudioSettingsPermission(), Binder.getCallingUid(), Binder.getCallingPid(),
VOL_ADJUST_NORMAL); callingHasAudioSettingsPermission(), VOL_ADJUST_NORMAL);
} }
protected void adjustStreamVolume(int streamType, int direction, int flags, protected void adjustStreamVolume(int streamType, int direction, int flags,
String callingPackage, String caller, int uid, boolean hasModifyAudioSettings, String callingPackage, String caller, int uid, int pid, boolean hasModifyAudioSettings,
int keyEventMode) { int keyEventMode) {
if (mUseFixedVolume) { if (mUseFixedVolume) {
return; return;
@@ -2779,8 +2780,7 @@ public class AudioService extends IAudioService.Stub
if (isMuteAdjust && if (isMuteAdjust &&
(streamType == AudioSystem.STREAM_VOICE_CALL || (streamType == AudioSystem.STREAM_VOICE_CALL ||
streamType == AudioSystem.STREAM_BLUETOOTH_SCO) && streamType == AudioSystem.STREAM_BLUETOOTH_SCO) &&
mContext.checkCallingOrSelfPermission( mContext.checkPermission(android.Manifest.permission.MODIFY_PHONE_STATE, pid, uid)
android.Manifest.permission.MODIFY_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) { != PackageManager.PERMISSION_GRANTED) {
Log.w(TAG, "MODIFY_PHONE_STATE Permission Denial: adjustStreamVolume from pid=" Log.w(TAG, "MODIFY_PHONE_STATE Permission Denial: adjustStreamVolume from pid="
+ Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()); + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid());
@@ -2790,8 +2790,8 @@ public class AudioService extends IAudioService.Stub
// If the stream is STREAM_ASSISTANT, // If the stream is STREAM_ASSISTANT,
// make sure that the calling app have the MODIFY_AUDIO_ROUTING permission. // make sure that the calling app have the MODIFY_AUDIO_ROUTING permission.
if (streamType == AudioSystem.STREAM_ASSISTANT && if (streamType == AudioSystem.STREAM_ASSISTANT &&
mContext.checkCallingOrSelfPermission( mContext.checkPermission(
android.Manifest.permission.MODIFY_AUDIO_ROUTING) android.Manifest.permission.MODIFY_AUDIO_ROUTING, pid, uid)
!= PackageManager.PERMISSION_GRANTED) { != PackageManager.PERMISSION_GRANTED) {
Log.w(TAG, "MODIFY_AUDIO_ROUTING Permission Denial: adjustStreamVolume from pid=" Log.w(TAG, "MODIFY_AUDIO_ROUTING Permission Denial: adjustStreamVolume from pid="
+ Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()); + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid());
@@ -3975,7 +3975,7 @@ public class AudioService extends IAudioService.Stub
} }
private void setMasterMuteInternal(boolean mute, int flags, String callingPackage, int uid, private void setMasterMuteInternal(boolean mute, int flags, String callingPackage, int uid,
int userId) { int userId, int pid) {
// If we are being called by the system check for user we are going to change // If we are being called by the system check for user we are going to change
// so we handle user restrictions correctly. // so we handle user restrictions correctly.
if (uid == android.os.Process.SYSTEM_UID) { if (uid == android.os.Process.SYSTEM_UID) {
@@ -3986,8 +3986,8 @@ public class AudioService extends IAudioService.Stub
return; return;
} }
if (userId != UserHandle.getCallingUserId() && if (userId != UserHandle.getCallingUserId() &&
mContext.checkCallingOrSelfPermission( mContext.checkPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL,
android.Manifest.permission.INTERACT_ACROSS_USERS_FULL) pid, uid)
!= PackageManager.PERMISSION_GRANTED) { != PackageManager.PERMISSION_GRANTED) {
return; return;
} }
@@ -4027,7 +4027,7 @@ public class AudioService extends IAudioService.Stub
public void setMasterMute(boolean mute, int flags, String callingPackage, int userId) { public void setMasterMute(boolean mute, int flags, String callingPackage, int userId) {
enforceModifyAudioRoutingPermission(); enforceModifyAudioRoutingPermission();
setMasterMuteInternal(mute, flags, callingPackage, Binder.getCallingUid(), setMasterMuteInternal(mute, flags, callingPackage, Binder.getCallingUid(),
userId); userId, Binder.getCallingPid());
} }
/** @see AudioManager#getStreamVolume(int) */ /** @see AudioManager#getStreamVolume(int) */
@@ -4928,8 +4928,8 @@ public class AudioService extends IAudioService.Stub
// direction and stream type swap here because the public // direction and stream type swap here because the public
// adjustSuggested has a different order than the other methods. // adjustSuggested has a different order than the other methods.
adjustSuggestedStreamVolume(direction, streamType, flags, packageName, packageName, uid, adjustSuggestedStreamVolume(direction, streamType, flags, packageName, packageName,
hasAudioSettingsPermission(uid, pid), VOL_ADJUST_NORMAL); uid, pid, hasAudioSettingsPermission(uid, pid), VOL_ADJUST_NORMAL);
} }
/** @see AudioManager#adjustStreamVolumeForUid(int, int, int, String, int, int, int) */ /** @see AudioManager#adjustStreamVolumeForUid(int, int, int, String, int, int, int) */
@@ -4948,7 +4948,7 @@ public class AudioService extends IAudioService.Stub
.toString())); .toString()));
} }
adjustStreamVolume(streamType, direction, flags, packageName, packageName, uid, adjustStreamVolume(streamType, direction, flags, packageName, packageName, uid, pid,
hasAudioSettingsPermission(uid, pid), VOL_ADJUST_NORMAL); hasAudioSettingsPermission(uid, pid), VOL_ADJUST_NORMAL);
} }