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

Commit 478d5df3 authored by Phil Burk's avatar Phil Burk
Browse files

aaudio: fix mmap result checking



Was checking for nullptr not MAP_FAILED

Bug: 33398120
Test: see mmap() docs
Change-Id: I02d178cb0188f8b0d6cd009699dccc7c97952e4b
Signed-off-by: default avatarPhil Burk <philburk@google.com>
parent c5cbb87d
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -72,13 +72,13 @@ status_t SharedMemoryParcelable::readFromParcel(const Parcel* parcel) {
}

aaudio_result_t SharedMemoryParcelable::close() {
    if (mResolvedAddress != nullptr) {
    if (mResolvedAddress != MMAP_UNRESOLVED_ADDRESS) {
        int err = munmap(mResolvedAddress, mSizeInBytes);
        if (err < 0) {
            ALOGE("SharedMemoryParcelable::close() munmap() failed %d", err);
            return AAudioConvert_androidToAAudioResult(err);
        }
        mResolvedAddress = nullptr;
        mResolvedAddress = MMAP_UNRESOLVED_ADDRESS;
    }
    if (mFd != -1) {
        ::close(mFd);
@@ -99,11 +99,12 @@ aaudio_result_t SharedMemoryParcelable::resolve(int32_t offsetInBytes, int32_t s
              offsetInBytes, sizeInBytes, mSizeInBytes);
        return AAUDIO_ERROR_OUT_OF_RANGE;
    }
    if (mResolvedAddress == nullptr) {
    if (mResolvedAddress == MMAP_UNRESOLVED_ADDRESS) {
        mResolvedAddress = (uint8_t *) mmap(0, mSizeInBytes, PROT_READ|PROT_WRITE,
                                          MAP_SHARED, mFd, 0);
        if (mResolvedAddress == nullptr) {
            ALOGE("SharedMemoryParcelable mmap failed for fd = %d", mFd);
        if (mResolvedAddress == MMAP_UNRESOLVED_ADDRESS) {
            ALOGE("SharedMemoryParcelable mmap failed for fd = %d, errno = %s",
                  mFd, strerror(errno));
            return AAUDIO_ERROR_INTERNAL;
        }
    }
+4 −1
Original line number Diff line number Diff line
@@ -64,9 +64,12 @@ public:
    void dump();

protected:

#define MMAP_UNRESOLVED_ADDRESS    reinterpret_cast<uint8_t*>(MAP_FAILED)

    int mFd = -1;
    int32_t mSizeInBytes = 0;
    uint8_t *mResolvedAddress = nullptr;
    uint8_t *mResolvedAddress = MMAP_UNRESOLVED_ADDRESS;
};

} /* namespace aaudio */
+2 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@
//#define LOG_NDEBUG 0
#include <utils/Log.h>

#include <sys/mman.h>

#include "binding/RingBufferParcelable.h"
#include "binding/AudioEndpointParcelable.h"