diff --git a/filament/backend/src/CircularBuffer.cpp b/filament/backend/src/CircularBuffer.cpp index 86bee8d6b1..0d298d2c27 100644 --- a/filament/backend/src/CircularBuffer.cpp +++ b/filament/backend/src/CircularBuffer.cpp @@ -90,19 +90,24 @@ void* CircularBuffer::alloc(size_t size) noexcept { if (UTILS_UNLIKELY(mUsesAshmem < 0)) { // ashmem failed - if (vaddr_guard != MAP_FAILED) + if (vaddr_guard != MAP_FAILED) { munmap(vaddr_guard, size); + } - if (vaddr_shadow != MAP_FAILED) + if (vaddr_shadow != MAP_FAILED) { munmap(vaddr_shadow, size); + } - if (vaddr != MAP_FAILED) + if (vaddr != MAP_FAILED) { munmap(vaddr, size); + } - if (fd >= 0) + if (fd >= 0) { close(fd); + } - data = mmap(nullptr, size * 2 + BLOCK_SIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + data = mmap(nullptr, size * 2 + BLOCK_SIZE, + PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); ASSERT_POSTCONDITION(data, "couldn't allocate %u KiB of virtual address space for the command buffer",