Skip to content
Snippets Groups Projects
Commit 8e0e372a authored by Jean-Baptiste Queru's avatar Jean-Baptiste Queru
Browse files

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
parent 9cd8057b
No related branches found
No related tags found
No related merge requests found
...@@ -94,7 +94,7 @@ void Assembly::ensureMbaseExecutable() ...@@ -94,7 +94,7 @@ void Assembly::ensureMbaseExecutable()
long pagemask = ~(pagesize - 1); // assumes pagesize is a power of 2 long pagemask = ~(pagesize - 1); // assumes pagesize is a power of 2
uint32_t* pageStart = (uint32_t*) (((uintptr_t) mBase) & pagemask); 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) { if (mBase && mprotect(pageStart, adjustedLength, PROT_READ | PROT_WRITE | PROT_EXEC) != 0) {
mspace_free(getMspace(), mBase); mspace_free(getMspace(), mBase);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment