IAudioPolicyService: Add attribute tags sanitization am: 39fdbd097a

am: f3cb11a0bc

Change-Id: I4334fc550cd5c2660e2e6f128d2cdd7429917a56
gugelfrei
Kevin Rocard 7 years ago committed by android-build-merger
commit 9c036d8c32

@ -928,6 +928,7 @@ status_t BnAudioPolicyService::onTransact(
bool hasAttributes = data.readInt32() != 0; bool hasAttributes = data.readInt32() != 0;
if (hasAttributes) { if (hasAttributes) {
data.read(&attr, sizeof(audio_attributes_t)); data.read(&attr, sizeof(audio_attributes_t));
sanetizeAudioAttributes(&attr);
} }
audio_session_t session = (audio_session_t)data.readInt32(); audio_session_t session = (audio_session_t)data.readInt32();
audio_stream_type_t stream = AUDIO_STREAM_DEFAULT; audio_stream_type_t stream = AUDIO_STREAM_DEFAULT;
@ -993,6 +994,7 @@ status_t BnAudioPolicyService::onTransact(
CHECK_INTERFACE(IAudioPolicyService, data, reply); CHECK_INTERFACE(IAudioPolicyService, data, reply);
audio_attributes_t attr; audio_attributes_t attr;
data.read(&attr, sizeof(audio_attributes_t)); data.read(&attr, sizeof(audio_attributes_t));
sanetizeAudioAttributes(&attr);
audio_io_handle_t input = (audio_io_handle_t)data.readInt32(); audio_io_handle_t input = (audio_io_handle_t)data.readInt32();
audio_session_t session = (audio_session_t)data.readInt32(); audio_session_t session = (audio_session_t)data.readInt32();
pid_t pid = (pid_t)data.readInt32(); pid_t pid = (pid_t)data.readInt32();
@ -1368,6 +1370,7 @@ status_t BnAudioPolicyService::onTransact(
data.read(&source, sizeof(struct audio_port_config)); data.read(&source, sizeof(struct audio_port_config));
audio_attributes_t attributes; audio_attributes_t attributes;
data.read(&attributes, sizeof(audio_attributes_t)); data.read(&attributes, sizeof(audio_attributes_t));
sanetizeAudioAttributes(&attributes);
audio_patch_handle_t handle = AUDIO_PATCH_HANDLE_NONE; audio_patch_handle_t handle = AUDIO_PATCH_HANDLE_NONE;
status_t status = startAudioSource(&source, &attributes, &handle); status_t status = startAudioSource(&source, &attributes, &handle);
reply->writeInt32(status); reply->writeInt32(status);
@ -1418,6 +1421,15 @@ status_t BnAudioPolicyService::onTransact(
} }
} }
void BnAudioPolicyService::sanetizeAudioAttributes(audio_attributes_t* attr)
{
const size_t tagsMaxSize = AUDIO_ATTRIBUTES_TAGS_MAX_SIZE;
if (strnlen(attr->tags, tagsMaxSize) >= tagsMaxSize) {
android_errorWriteLog(0x534e4554, "68953950"); // SafetyNet logging
}
attr->tags[tagsMaxSize - 1] = '\0';
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
} // namespace android } // namespace android

@ -178,6 +178,8 @@ public:
const Parcel& data, const Parcel& data,
Parcel* reply, Parcel* reply,
uint32_t flags = 0); uint32_t flags = 0);
private:
void sanetizeAudioAttributes(audio_attributes_t* attr);
}; };
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------

Loading…
Cancel
Save