Merge "AudioService: fix permission check on volume control" into sc-qpr1-dev
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user