http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59733
Kostya Serebryany <kcc at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |kcc at gcc dot gnu.org Target Milestone|4.9.0 |--- --- Comment #24 from Kostya Serebryany <kcc at gcc dot gnu.org> --- I increased the mmap granularity in sanitizer's allocator to allow our bot on ubuntu pre-14.04 to pass. http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_allocator.h?r1=200197&r2=200196&pathrev=200197 Feel free to apply the same change to GCC trunk. Once the kernel bug is fixed and the fix reaches ubuntu 14.04 tree we will likely revert this change. There is nothing else we can do on sanitizer side -- the kernel bug is significant (e.g. it makes gimp crash) and so such system is unusable for many other purposes. Let's keep this bug open so that we don't forget to revert the workaround. FTR, here is a program that detects the presence of a broken kernel: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/mman.h> #include <assert.h> int main() { char *p = (char*)0x600000000000; size_t i; for (i = 0; i < 100000; i++) { void *addr = p + i * 4096; void *ret = mmap(addr, 4096, PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); if (addr != ret) { fprintf(stderr, "failed at iteration %zd\n", i); char command[100]; snprintf(command, sizeof(command), "cat /proc/%d/maps | head -30", getpid()); system(command); return 1; } } } On a broken kernel it will print something like this: failed at iteration 65514 00400000-00401000 r-xp 00000000 fc:00 20991316 /tmp/a.out 00600000-00601000 r--p 00000000 fc:00 20991316 /tmp/a.out 00601000-00602000 rw-p 00001000 fc:00 20991316 /tmp/a.out 600000000000-600000001000 rw-p 00000000 00:00 0 600000001000-600000002000 rw-p 00000000 00:00 0 600000002000-600000003000 rw-p 00000000 00:00 0 600000003000-600000004000 rw-p 00000000 00:00 0 600000004000-600000005000 rw-p 00000000 00:00 0 ...