make libacc run with execute stack protections enabled.
libacc was allocating memory using malloc for executable pages. When running on a system where the stack and heap are not executable, using malloc for executable pages will result in a segfault. This change modifies libacc to allow the code to run, even if the system is running with executable stack and heap disabled. Change-Id: Ia74e3d83750c09b7eefd865ff059db920093040d
This commit is contained in:
parent
33680b106d
commit
093ba25991
|
@ -23,10 +23,7 @@
|
|||
|
||||
#include <cutils/hashmap.h>
|
||||
|
||||
#if defined(__i386__)
|
||||
#include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
|
||||
#if defined(__arm__)
|
||||
#define DEFAULT_ARM_CODEGEN
|
||||
|
@ -230,7 +227,7 @@ class Compiler : public ErrorSink {
|
|||
|
||||
void release() {
|
||||
if (pProgramBase != 0) {
|
||||
free(pProgramBase);
|
||||
munmap(pProgramBase, mSize);
|
||||
pProgramBase = 0;
|
||||
}
|
||||
}
|
||||
|
@ -263,7 +260,9 @@ class Compiler : public ErrorSink {
|
|||
virtual void init(int size) {
|
||||
release();
|
||||
mSize = size;
|
||||
pProgramBase = (char*) calloc(1, size);
|
||||
pProgramBase = (char*) mmap(NULL, size,
|
||||
PROT_EXEC | PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
ind = pProgramBase;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue