check /proc/sys/kernel/randomize_va_space under linux to make sure stack pointer...
authorGengbin Zheng <gzheng@illinois.edu>
Fri, 12 Oct 2007 22:11:34 +0000 (22:11 +0000)
committerGengbin Zheng <gzheng@illinois.edu>
Fri, 12 Oct 2007 22:11:34 +0000 (22:11 +0000)
src/conv-core/isomalloc.c

index d1fe83ad7945e8e6b6f2fb519822c26d59af1268..0179bdfe55b4d41fa2e1ea8710bf3d29a8854b87 100644 (file)
@@ -24,6 +24,22 @@ generalized by Orion Lawlor November 2001.
 #include <stdlib.h>
 #include <errno.h> /* just so I can find dynamically-linked symbols */
 
+static int read_randomflag(void)
+{
+  FILE *fp;
+  int random_flag;
+  CmiLock(smp_mutex);
+  fp = fopen("/proc/sys/kernel/randomize_va_space", "r");
+  if (fp != NULL) {
+    fscanf(fp, "%d", &random_flag);
+  }
+  else {
+    random_flag = -1;
+  }
+  CmiUnlock(smp_mutex);
+  return random_flag;
+}
+
 struct CmiIsomallocBlock {
       int slot; /*First mapped slot*/
       int length; /*Length of (user portion of) mapping, in bytes*/
@@ -881,6 +897,11 @@ void CmiIsomallocInit(char **argv)
   if (!init_map(argv)) {
     disable_isomalloc("mmap() does not work");
   }
+  else if (read_randomflag() == 1) {
+    if (CmiMyPe() == 0)
+      printf("Charm> run 'echo 0 > /proc/sys/kernel/randomize_va_space' as root to disable the randomization of stack pointer\n");
+    disable_isomalloc("mmap() does not work due to stack pointer randomization");
+  }
   else {
     init_ranges(argv);
   }