Today I learned that MemorySanitizer somehow cannot work in my environment:
- Host OS: OS X 10.11.3
- VirtualBox 5.0.14
- Guest OS: Ubuntu 14.04.4
- Clang 3.7.1
Use the very first example from MemorySantizer documentation:
// umr.cc
#include <stdio.h>
int main(int argc, char** argv) {
int* a = new int[10];
a[5] = 0;
if (a[argc])
printf("xx\n");
return 0;
}
Compile it with MemorySanitizer enabled:
$ clang -fsanitize=memory -fno-omit-frame-pointer -g -O2 umr.cc
When running the generated executable:
$ ./a.out
FATAL: Code below application range: 0x55ac465bef50 < 0x600000000000. Non-PIE build?
FATAL: MemorySanitizer can not mmap the shadow memory.
FATAL: Make sure to compile with -fPIE and to link with -pie.
FATAL: Disabling ASLR is known to cause this error.
FATAL: If running under GDB, try 'set disable-randomization off'.
==31789==Process memory map follows:
0x55ac46558000-0x55ac465e2000 /home/patrick/src/clang/umr/a.out
0x55ac467e1000-0x55ac467e2000 /home/patrick/src/clang/umr/a.out
0x55ac467e2000-0x55ac467e3000 /home/patrick/src/clang/umr/a.out
0x55ac467e3000-0x55ac48bfa000
...
Tweaking with -fPIE
or system ASLR setting does not help. That’s probably a bug. Sigh.