Add workaround for AppArmor rule that blocks use of low memory
authorChris Hanson <org/chris-hanson/cph>
Sun, 4 May 2008 07:13:37 +0000 (07:13 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sun, 4 May 2008 07:13:37 +0000 (07:13 +0000)
addresses.  This is causing trouble on Ubuntu 8.04.

v7/src/microcode/ux.c

index 9f0b23cec03c93ee5572f5fc97628a0f1b172aa9..b7488584a40e32a693685eae3f7c5b8802e8a16b 100644 (file)
@@ -1,6 +1,6 @@
 /* -*-C-*-
 
-$Id: ux.c,v 1.35 2008/01/30 20:02:21 cph Exp $
+$Id: ux.c,v 1.36 2008/05/04 07:13:37 cph Exp $
 
 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994,
     1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
@@ -677,6 +677,22 @@ mmap_heap_malloc (unsigned long requested_length)
     request = (((requested_length + (ps - 1)) / ps) * ps);
   }
 
+#ifdef __linux__
+  /* AppArmor can specify a minimum usable address.  In that case we
+     need to detect it and compensate.  */
+  {
+    FILE * s = (fopen ("/proc/sys/vm/mmap_min_addr", "r"));
+    if (s != 0)
+      {
+       unsigned long new_min_result;
+       int rc = (fscanf (s, "%lu", (&new_min_result)));
+       fclose (s);
+       if ((rc == 1) && (new_min_result > min_result))
+         min_result = new_min_result;
+      }
+  }
+#endif
+
   result = (mmap_heap_malloc_search (request, min_result, max_result));
 
   if (result != 0)