Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f65d6e3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Legacy wrapper: Use arbitrary limit on buffer size" into oc-mr1-dev

parents 0564edd9 46cba442
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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;
+4 −8
Original line number Diff line number Diff line
@@ -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();
    }
+3 −8
Original line number Diff line number Diff line
@@ -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();
    }