|
@@ -29,13 +29,26 @@
|
|
#include <linux/random.h>
|
|
#include <linux/random.h>
|
|
#include <linux/limits.h>
|
|
#include <linux/limits.h>
|
|
#include <linux/sched.h>
|
|
#include <linux/sched.h>
|
|
|
|
+#include <asm/elf.h>
|
|
|
|
+
|
|
|
|
+static unsigned int stack_maxrandom_size(void)
|
|
|
|
+{
|
|
|
|
+ unsigned int max = 0;
|
|
|
|
+ if ((current->flags & PF_RANDOMIZE) &&
|
|
|
|
+ !(current->personality & ADDR_NO_RANDOMIZE)) {
|
|
|
|
+ max = ((-1U) & STACK_RND_MASK) << PAGE_SHIFT;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return max;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
|
|
/*
|
|
/*
|
|
* Top of mmap area (just below the process stack).
|
|
* Top of mmap area (just below the process stack).
|
|
*
|
|
*
|
|
- * Leave an at least ~128 MB hole.
|
|
|
|
|
|
+ * Leave an at least ~128 MB hole with possible stack randomization.
|
|
*/
|
|
*/
|
|
-#define MIN_GAP (128*1024*1024)
|
|
|
|
|
|
+#define MIN_GAP (128*1024*1024UL + stack_maxrandom_size())
|
|
#define MAX_GAP (TASK_SIZE/6*5)
|
|
#define MAX_GAP (TASK_SIZE/6*5)
|
|
|
|
|
|
/*
|
|
/*
|