]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: don't use twice the memory with grsec-like kernels
authorGustavo Niemeyer <gustavo@niemeyer.net>
Fri, 24 Jun 2011 03:29:59 +0000 (00:29 -0300)
committerGustavo Niemeyer <gustavo@niemeyer.net>
Fri, 24 Jun 2011 03:29:59 +0000 (00:29 -0300)
grsec needs the FIXED flag to be provided to mmap, which
works now.  That said, when the allocation fails to be made
in the specific address, we're still given back a writable
page.  This change will unmap that page to avoid using
twice the amount of memory needed.

It'd also be pretty easy to avoid the extra system calls
once we detected that the flag is needed, but I'm not sure
if that edge case is worth the effort.

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/4634086

src/pkg/runtime/linux/mem.c

index 38ca7e4a0f973f60cb61b503a7246f88d8024b26..ad0fac6d3f48fcc0c20ab66a34aef7ffba66dd53 100644 (file)
@@ -91,6 +91,9 @@ runtime·SysMap(void *v, uintptr n)
                if(p != v && addrspace_free(v, n)) {
                        // On some systems, mmap ignores v without
                        // MAP_FIXED, so retry if the address space is free.
+                       if(p > (void*)4096) {
+                               runtime·munmap(p, n);
+                       }
                        p = runtime·mmap(v, n, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_ANON|MAP_FIXED|MAP_PRIVATE, -1, 0);
                }
                if(p == (void*)ENOMEM)