From b1cc36b5d52de7cb3d78426d41dee87f25d7164a Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Mon, 11 Dec 2017 12:14:16 -0800 Subject: [PATCH] Revert "Revert "restrict binder transactions to audioserver"" This reverts commit 009c1e37d07936178b59346ee8f7cb19484644b6. Bug: 70388312 Test: AudioRecord CTS, Audio smoke tests Change-Id: I263aa1ed7ef832d593bc0fb02000d986ad1a3f69 --- media/libaudioclient/IAudioFlinger.cpp | 35 +++++++++++++++++--- media/libaudioclient/IAudioPolicyService.cpp | 26 ++++++++++++++- 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/media/libaudioclient/IAudioFlinger.cpp b/media/libaudioclient/IAudioFlinger.cpp index 5db60f37d4..56ddd4f9e6 100644 --- a/media/libaudioclient/IAudioFlinger.cpp +++ b/media/libaudioclient/IAudioFlinger.cpp @@ -22,6 +22,7 @@ #include #include +#include #include #include "IAudioFlinger.h" @@ -836,6 +837,35 @@ IMPLEMENT_META_INTERFACE(AudioFlinger, "android.media.IAudioFlinger"); status_t BnAudioFlinger::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { + // make sure transactions reserved to AudioPolicyManager do not come from other processes + switch (code) { + case SET_STREAM_VOLUME: + case SET_STREAM_MUTE: + case SET_MODE: + case OPEN_OUTPUT: + case OPEN_DUPLICATE_OUTPUT: + case CLOSE_OUTPUT: + case SUSPEND_OUTPUT: + case RESTORE_OUTPUT: + case OPEN_INPUT: + case CLOSE_INPUT: + case INVALIDATE_STREAM: + case SET_VOICE_VOLUME: + case MOVE_EFFECTS: + case LOAD_HW_MODULE: + case LIST_AUDIO_PORTS: + case GET_AUDIO_PORT: + case CREATE_AUDIO_PATCH: + case RELEASE_AUDIO_PATCH: + case LIST_AUDIO_PATCHES: + case SET_AUDIO_PORT_CONFIG: + ALOGW("%s: transaction %d received from PID %d", + __func__, code, IPCThreadState::self()->getCallingPid()); + return INVALID_OPERATION; + default: + break; + } + // Whitelist of relevant events to trigger log merging. // Log merging should activate during audio activity of any kind. This are considered the // most relevant events. @@ -845,12 +875,8 @@ status_t BnAudioFlinger::onTransact( case CREATE_RECORD: case SET_MASTER_VOLUME: case SET_MASTER_MUTE: - case SET_STREAM_VOLUME: - case SET_STREAM_MUTE: case SET_MIC_MUTE: case SET_PARAMETERS: - case OPEN_INPUT: - case SET_VOICE_VOLUME: case CREATE_EFFECT: case SYSTEM_READY: { requestLogMerge(); @@ -859,6 +885,7 @@ status_t BnAudioFlinger::onTransact( default: break; } + switch (code) { case CREATE_TRACK: { CHECK_INTERFACE(IAudioFlinger, data, reply); diff --git a/media/libaudioclient/IAudioPolicyService.cpp b/media/libaudioclient/IAudioPolicyService.cpp index 970ae90f1a..53bc1b7066 100644 --- a/media/libaudioclient/IAudioPolicyService.cpp +++ b/media/libaudioclient/IAudioPolicyService.cpp @@ -22,6 +22,7 @@ #include #include +#include #include #include @@ -831,10 +832,33 @@ IMPLEMENT_META_INTERFACE(AudioPolicyService, "android.media.IAudioPolicyService" // ---------------------------------------------------------------------- - status_t BnAudioPolicyService::onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) { + // make sure transactions reserved to AudioFlinger do not come from other processes + switch (code) { + case START_OUTPUT: + case STOP_OUTPUT: + case RELEASE_OUTPUT: + case GET_INPUT_FOR_ATTR: + case START_INPUT: + case STOP_INPUT: + case RELEASE_INPUT: + case GET_STRATEGY_FOR_STREAM: + case GET_OUTPUT_FOR_EFFECT: + case REGISTER_EFFECT: + case UNREGISTER_EFFECT: + case SET_EFFECT_ENABLED: + case GET_OUTPUT_FOR_ATTR: + case ACQUIRE_SOUNDTRIGGER_SESSION: + case RELEASE_SOUNDTRIGGER_SESSION: + ALOGW("%s: transaction %d received from PID %d", + __func__, code, IPCThreadState::self()->getCallingPid()); + return INVALID_OPERATION; + default: + break; + } + switch (code) { case SET_DEVICE_CONNECTION_STATE: { CHECK_INTERFACE(IAudioPolicyService, data, reply);