Loading audio/2.0/default/Stream.h +7 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,13 @@ using ::android::sp; struct Stream : public IStream, public ParametersUtil { explicit Stream(audio_stream_t* stream); /** 1GiB is the maximum buffer size the HAL client is allowed to request. * This value has been chosen to be under SIZE_MAX and still big enough * for all audio use case. * Keep private for 2.0, put in .hal in 2.1 */ static constexpr uint32_t MAX_BUFFER_SIZE = 2 << 30 /* == 1GiB */; // Methods from ::android::hardware::audio::V2_0::IStream follow. Return<uint64_t> getFrameSize() override; Return<uint64_t> getFrameCount() override; Loading audio/2.0/default/StreamIn.cpp +4 −8 Original line number Diff line number Diff line Loading @@ -347,14 +347,10 @@ Return<void> StreamIn::prepareForReading(uint32_t frameSize, sendError(Result::INVALID_ARGUMENTS); return Void(); } // A message queue asserts if it can not handle the requested buffer, // thus the client has to guess the maximum size it can handle // Choose an arbitrary margin for the overhead of a message queue size_t metadataOverhead = 100000; if (frameSize > (std::numeric_limits<size_t>::max() - metadataOverhead) / framesCount) { ALOGE("Buffer too big: %u*%u bytes can not fit in a message queue", frameSize, framesCount); if (frameSize > Stream::MAX_BUFFER_SIZE / framesCount) { ALOGE("Buffer too big: %u*%u bytes > MAX_BUFFER_SIZE (%u)", frameSize, framesCount, Stream::MAX_BUFFER_SIZE); sendError(Result::INVALID_ARGUMENTS); return Void(); } Loading audio/2.0/default/StreamOut.cpp +3 −8 Original line number Diff line number Diff line Loading @@ -323,14 +323,9 @@ Return<void> StreamOut::prepareForWriting(uint32_t frameSize, sendError(Result::INVALID_ARGUMENTS); return Void(); } // A message queue asserts if it can not handle the requested buffer, // thus the client has to guess the maximum size it can handle size_t metadataOverhead = 100000; // Arbitrary margin for the overhead of a message queue if (frameSize > (std::numeric_limits<size_t>::max() - metadataOverhead) / framesCount) { ALOGE("Buffer too big: %u*%u bytes can not fit in a message queue", frameSize, framesCount); if (frameSize > Stream::MAX_BUFFER_SIZE / framesCount) { ALOGE("Buffer too big: %u*%u bytes > MAX_BUFFER_SIZE (%u)", frameSize, framesCount, Stream::MAX_BUFFER_SIZE); sendError(Result::INVALID_ARGUMENTS); return Void(); } Loading Loading
audio/2.0/default/Stream.h +7 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,13 @@ using ::android::sp; struct Stream : public IStream, public ParametersUtil { explicit Stream(audio_stream_t* stream); /** 1GiB is the maximum buffer size the HAL client is allowed to request. * This value has been chosen to be under SIZE_MAX and still big enough * for all audio use case. * Keep private for 2.0, put in .hal in 2.1 */ static constexpr uint32_t MAX_BUFFER_SIZE = 2 << 30 /* == 1GiB */; // Methods from ::android::hardware::audio::V2_0::IStream follow. Return<uint64_t> getFrameSize() override; Return<uint64_t> getFrameCount() override; Loading
audio/2.0/default/StreamIn.cpp +4 −8 Original line number Diff line number Diff line Loading @@ -347,14 +347,10 @@ Return<void> StreamIn::prepareForReading(uint32_t frameSize, sendError(Result::INVALID_ARGUMENTS); return Void(); } // A message queue asserts if it can not handle the requested buffer, // thus the client has to guess the maximum size it can handle // Choose an arbitrary margin for the overhead of a message queue size_t metadataOverhead = 100000; if (frameSize > (std::numeric_limits<size_t>::max() - metadataOverhead) / framesCount) { ALOGE("Buffer too big: %u*%u bytes can not fit in a message queue", frameSize, framesCount); if (frameSize > Stream::MAX_BUFFER_SIZE / framesCount) { ALOGE("Buffer too big: %u*%u bytes > MAX_BUFFER_SIZE (%u)", frameSize, framesCount, Stream::MAX_BUFFER_SIZE); sendError(Result::INVALID_ARGUMENTS); return Void(); } Loading
audio/2.0/default/StreamOut.cpp +3 −8 Original line number Diff line number Diff line Loading @@ -323,14 +323,9 @@ Return<void> StreamOut::prepareForWriting(uint32_t frameSize, sendError(Result::INVALID_ARGUMENTS); return Void(); } // A message queue asserts if it can not handle the requested buffer, // thus the client has to guess the maximum size it can handle size_t metadataOverhead = 100000; // Arbitrary margin for the overhead of a message queue if (frameSize > (std::numeric_limits<size_t>::max() - metadataOverhead) / framesCount) { ALOGE("Buffer too big: %u*%u bytes can not fit in a message queue", frameSize, framesCount); if (frameSize > Stream::MAX_BUFFER_SIZE / framesCount) { ALOGE("Buffer too big: %u*%u bytes > MAX_BUFFER_SIZE (%u)", frameSize, framesCount, Stream::MAX_BUFFER_SIZE); sendError(Result::INVALID_ARGUMENTS); return Void(); } Loading