summaryrefslogtreecommitdiffstats
path: root/libpixelflinger/codeflinger/CodeCache.cpp
diff options
context:
space:
mode:
authorJean-Baptiste Queru <jbq@google.com>2010-10-14 14:29:00 -0700
committerJean-Baptiste Queru <jbq@google.com>2010-10-14 14:29:00 -0700
commit8e0e372a388434a0553810e2b958e59a26a6bd96 (patch)
tree94b3cf8d91ffcc3db0f027212f244cdcada402c5 /libpixelflinger/codeflinger/CodeCache.cpp
parent9cd8057b6e8f5fc1254a4ed19e8127b5091b5dce (diff)
downloadsystem_core-8e0e372a388434a0553810e2b958e59a26a6bd96.zip
system_core-8e0e372a388434a0553810e2b958e59a26a6bd96.tar.gz
system_core-8e0e372a388434a0553810e2b958e59a26a6bd96.tar.bz2
Set PROT_EXEC on the whole pixelflinger code cache.
The pointer difference between word pointers is a number of words, and it needs to be multiplied by the size of a word to get a proper byte size. Without this, we tend to see crashes when the code crosses a page boundary. Bug: 3026204 Bug: 3097482 Change-Id: I37776d26d5afcdb1da71680de02fbb95e6548371
Diffstat (limited to 'libpixelflinger/codeflinger/CodeCache.cpp')
-rw-r--r--libpixelflinger/codeflinger/CodeCache.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/libpixelflinger/codeflinger/CodeCache.cpp b/libpixelflinger/codeflinger/CodeCache.cpp
index 5877ff4..125c3ce 100644
--- a/libpixelflinger/codeflinger/CodeCache.cpp
+++ b/libpixelflinger/codeflinger/CodeCache.cpp
@@ -94,7 +94,7 @@ void Assembly::ensureMbaseExecutable()
long pagemask = ~(pagesize - 1); // assumes pagesize is a power of 2
uint32_t* pageStart = (uint32_t*) (((uintptr_t) mBase) & pagemask);
- size_t adjustedLength = mBase - pageStart + mSize;
+ size_t adjustedLength = (mBase - pageStart) * sizeof(uint32_t) + mSize;
if (mBase && mprotect(pageStart, adjustedLength, PROT_READ | PROT_WRITE | PROT_EXEC) != 0) {
mspace_free(getMspace(), mBase);