|
|
@@ -65,7 +65,11 @@ unsigned long arch_mmap_rnd(void)
|
|
|
static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stack)
|
|
|
{
|
|
|
unsigned long gap = rlim_stack->rlim_cur;
|
|
|
- unsigned long pad = (STACK_RND_MASK << PAGE_SHIFT) + stack_guard_gap;
|
|
|
+ unsigned long pad = stack_guard_gap;
|
|
|
+
|
|
|
+ /* Account for stack randomization if necessary */
|
|
|
+ if (current->flags & PF_RANDOMIZE)
|
|
|
+ pad += (STACK_RND_MASK << PAGE_SHIFT);
|
|
|
|
|
|
/* Values close to RLIM_INFINITY can overflow. */
|
|
|
if (gap + pad > gap)
|