diff options
| author | Russ Cox <rsc@golang.org> | 2010-09-28 20:30:01 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2010-09-28 20:30:01 -0400 |
| commit | 649aab835fc8e0fef8e0456396378ed1495d41bd (patch) | |
| tree | fb512b439ef066fadef5d54b811dcaab25eca5b9 /src/pkg/runtime/linux | |
| parent | 949985648875b8320dae724ae51e636ee08dd6f2 (diff) | |
| download | go-649aab835fc8e0fef8e0456396378ed1495d41bd.tar.xz | |
runtime: add mmap of null page just in case
R=r, iant, robert.swiecki, rsc1
CC=golang-dev
https://golang.org/cl/1904044
Diffstat (limited to 'src/pkg/runtime/linux')
| -rw-r--r-- | src/pkg/runtime/linux/386/defs.h | 1 | ||||
| -rw-r--r-- | src/pkg/runtime/linux/amd64/defs.h | 1 | ||||
| -rw-r--r-- | src/pkg/runtime/linux/arm/defs.h | 1 | ||||
| -rw-r--r-- | src/pkg/runtime/linux/defs.c | 1 | ||||
| -rw-r--r-- | src/pkg/runtime/linux/defs2.c | 1 | ||||
| -rw-r--r-- | src/pkg/runtime/linux/defs_arm.c | 1 | ||||
| -rw-r--r-- | src/pkg/runtime/linux/mem.c | 17 |
7 files changed, 20 insertions, 3 deletions
diff --git a/src/pkg/runtime/linux/386/defs.h b/src/pkg/runtime/linux/386/defs.h index ef8ef05d03..c1f58b2a08 100644 --- a/src/pkg/runtime/linux/386/defs.h +++ b/src/pkg/runtime/linux/386/defs.h @@ -10,6 +10,7 @@ enum { PROT_EXEC = 0x4, MAP_ANON = 0x20, MAP_PRIVATE = 0x2, + MAP_FIXED = 0x10, SA_RESTART = 0x10000000, SA_ONSTACK = 0x8000000, SA_RESTORER = 0x4000000, diff --git a/src/pkg/runtime/linux/amd64/defs.h b/src/pkg/runtime/linux/amd64/defs.h index c08e6b25d1..3e3d32f0d4 100644 --- a/src/pkg/runtime/linux/amd64/defs.h +++ b/src/pkg/runtime/linux/amd64/defs.h @@ -10,6 +10,7 @@ enum { PROT_EXEC = 0x4, MAP_ANON = 0x20, MAP_PRIVATE = 0x2, + MAP_FIXED = 0x10, SA_RESTART = 0x10000000, SA_ONSTACK = 0x8000000, SA_RESTORER = 0x4000000, diff --git a/src/pkg/runtime/linux/arm/defs.h b/src/pkg/runtime/linux/arm/defs.h index b139851715..ff4ba3e7c9 100644 --- a/src/pkg/runtime/linux/arm/defs.h +++ b/src/pkg/runtime/linux/arm/defs.h @@ -10,6 +10,7 @@ enum { PROT_EXEC = 0x4, MAP_ANON = 0x20, MAP_PRIVATE = 0x2, + MAP_FIXED = 0x10, SA_RESTART = 0x10000000, SA_ONSTACK = 0x8000000, SA_RESTORER = 0x4000000, diff --git a/src/pkg/runtime/linux/defs.c b/src/pkg/runtime/linux/defs.c index f3bdb61fa2..2044fd60c9 100644 --- a/src/pkg/runtime/linux/defs.c +++ b/src/pkg/runtime/linux/defs.c @@ -27,6 +27,7 @@ enum { $MAP_ANON = MAP_ANONYMOUS, $MAP_PRIVATE = MAP_PRIVATE, + $MAP_FIXED = MAP_FIXED, $SA_RESTART = SA_RESTART, $SA_ONSTACK = SA_ONSTACK, diff --git a/src/pkg/runtime/linux/defs2.c b/src/pkg/runtime/linux/defs2.c index 4cfe4a7ed0..3c0b110fc9 100644 --- a/src/pkg/runtime/linux/defs2.c +++ b/src/pkg/runtime/linux/defs2.c @@ -47,6 +47,7 @@ enum { $MAP_ANON = MAP_ANONYMOUS, $MAP_PRIVATE = MAP_PRIVATE, + $MAP_FIXED = MAP_FIXED, $SA_RESTART = SA_RESTART, $SA_ONSTACK = SA_ONSTACK, diff --git a/src/pkg/runtime/linux/defs_arm.c b/src/pkg/runtime/linux/defs_arm.c index 2b197272c6..d30c5bec43 100644 --- a/src/pkg/runtime/linux/defs_arm.c +++ b/src/pkg/runtime/linux/defs_arm.c @@ -31,6 +31,7 @@ enum { $MAP_ANON = MAP_ANONYMOUS, $MAP_PRIVATE = MAP_PRIVATE, + $MAP_FIXED = MAP_FIXED, $SA_RESTART = SA_RESTART, $SA_ONSTACK = SA_ONSTACK, diff --git a/src/pkg/runtime/linux/mem.c b/src/pkg/runtime/linux/mem.c index bad67001c4..925e7fd342 100644 --- a/src/pkg/runtime/linux/mem.c +++ b/src/pkg/runtime/linux/mem.c @@ -14,10 +14,10 @@ SysAlloc(uintptr n) if(p == (void*)EACCES) { printf("mmap: access denied\n"); printf("If you're running SELinux, enable execmem for this process.\n"); - } else { - printf("mmap: errno=%p\n", p); + exit(2); } - exit(2); + printf("mmap: errno=%p\n", p); + throw("mmap"); } return p; } @@ -37,3 +37,14 @@ SysFree(void *v, uintptr n) runtime_munmap(v, n); } +void +SysMemInit(void) +{ + // Code generators assume that references to addresses + // on the first page will fault. Map the page explicitly with + // no permissions, to head off possible bugs like the system + // allocating that page as the virtual address space fills. + // Ignore any error, since other systems might be smart + // enough to never allow anything there. + runtime_mmap(nil, 4096, PROT_NONE, MAP_FIXED|MAP_ANON|MAP_PRIVATE, -1, 0); +} |
