]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: remove PROT_EXEC from mmap calls.
authorShenghou Ma <minux.ma@gmail.com>
Sun, 24 Feb 2013 14:47:22 +0000 (22:47 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Sun, 24 Feb 2013 14:47:22 +0000 (22:47 +0800)
Executable heap is gone on Unix!

R=golang-dev, dave, bradfitz
CC=golang-dev
https://golang.org/cl/7405045

src/pkg/runtime/mem_darwin.c
src/pkg/runtime/mem_freebsd.c
src/pkg/runtime/mem_linux.c
src/pkg/runtime/mem_netbsd.c
src/pkg/runtime/mem_openbsd.c

index cde5601cf78d25ca957c576017f014e97d1c3bd1..04e71939440aa4a0ad1f8c185bf25007b9f71c8b 100644 (file)
@@ -14,7 +14,7 @@ runtime·SysAlloc(uintptr n)
        void *v;
 
        mstats.sys += n;
-       v = runtime·mmap(nil, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
+       v = runtime·mmap(nil, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
        if(v < (void*)4096)
                return nil;
        return v;
@@ -51,7 +51,7 @@ runtime·SysMap(void *v, uintptr n)
        void *p;
        
        mstats.sys += n;
-       p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
+       p = runtime·mmap(v, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
        if(p == (void*)-ENOMEM)
                runtime·throw("runtime: out of memory");
        if(p != v)
index cc31711f8ede7b209a42ca421a7abc3c6d5af15f..f217e9db1ee559c2874a3b355f0d9b6502dcde04 100644 (file)
@@ -14,7 +14,7 @@ runtime·SysAlloc(uintptr n)
        void *v;
 
        mstats.sys += n;
-       v = runtime·mmap(nil, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
+       v = runtime·mmap(nil, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
        if(v < (void*)4096)
                return nil;
        return v;
@@ -59,7 +59,7 @@ runtime·SysMap(void *v, uintptr n)
 
        // On 64-bit, we don't actually have v reserved, so tread carefully.
        if(sizeof(void*) == 8) {
-               p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
+               p = runtime·mmap(v, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
                if(p == (void*)-ENOMEM)
                        runtime·throw("runtime: out of memory");
                if(p != v) {
@@ -69,7 +69,7 @@ runtime·SysMap(void *v, uintptr n)
                return;
        }
 
-       p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
+       p = runtime·mmap(v, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
        if(p == (void*)-ENOMEM)
                runtime·throw("runtime: out of memory");
        if(p != v)
index db1975f4ca838ff3d3fc85c0ba99f060712e51fa..ebcec1e8638d98742bcbf2dd2ec1e73e2c96df79 100644 (file)
@@ -57,7 +57,7 @@ runtime·SysAlloc(uintptr n)
        void *p;
 
        mstats.sys += n;
-       p = runtime·mmap(nil, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
+       p = runtime·mmap(nil, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
        if(p < (void*)4096) {
                if(p == (void*)EACCES) {
                        runtime·printf("runtime: mmap: access denied\n");
@@ -118,7 +118,7 @@ runtime·SysMap(void *v, uintptr n)
 
        // On 64-bit, we don't actually have v reserved, so tread carefully.
        if(sizeof(void*) == 8 && (uintptr)v >= 0xffffffffU) {
-               p = mmap_fixed(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
+               p = mmap_fixed(v, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
                if(p == (void*)ENOMEM)
                        runtime·throw("runtime: out of memory");
                if(p != v) {
@@ -128,7 +128,7 @@ runtime·SysMap(void *v, uintptr n)
                return;
        }
 
-       p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
+       p = runtime·mmap(v, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
        if(p == (void*)ENOMEM)
                runtime·throw("runtime: out of memory");
        if(p != v)
index 43fef40ba4b3892645a988e9547e5b4e392c8d94..77ce04c4eea9a768dead416520a738f2701ad958 100644 (file)
@@ -19,7 +19,7 @@ runtime·SysAlloc(uintptr n)
        void *v;
 
        mstats.sys += n;
-       v = runtime·mmap(nil, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
+       v = runtime·mmap(nil, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
        if(v < (void*)4096)
                return nil;
        return v;
@@ -65,7 +65,7 @@ runtime·SysMap(void *v, uintptr n)
 
        // On 64-bit, we don't actually have v reserved, so tread carefully.
        if(sizeof(void*) == 8) {
-               p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
+               p = runtime·mmap(v, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
                if(p == (void*)-ENOMEM)
                        runtime·throw("runtime: out of memory");
                if(p != v) {
@@ -75,7 +75,7 @@ runtime·SysMap(void *v, uintptr n)
                return;
        }
 
-       p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
+       p = runtime·mmap(v, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
        if(p == (void*)-ENOMEM)
                runtime·throw("runtime: out of memory");
        if(p != v)
index 43fef40ba4b3892645a988e9547e5b4e392c8d94..77ce04c4eea9a768dead416520a738f2701ad958 100644 (file)
@@ -19,7 +19,7 @@ runtime·SysAlloc(uintptr n)
        void *v;
 
        mstats.sys += n;
-       v = runtime·mmap(nil, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
+       v = runtime·mmap(nil, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
        if(v < (void*)4096)
                return nil;
        return v;
@@ -65,7 +65,7 @@ runtime·SysMap(void *v, uintptr n)
 
        // On 64-bit, we don't actually have v reserved, so tread carefully.
        if(sizeof(void*) == 8) {
-               p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_PRIVATE, -1, 0);
+               p = runtime·mmap(v, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0);
                if(p == (void*)-ENOMEM)
                        runtime·throw("runtime: out of memory");
                if(p != v) {
@@ -75,7 +75,7 @@ runtime·SysMap(void *v, uintptr n)
                return;
        }
 
-       p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
+       p = runtime·mmap(v, n, PROT_READ|PROT_WRITE, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
        if(p == (void*)-ENOMEM)
                runtime·throw("runtime: out of memory");
        if(p != v)