Merge tag 'arm64-perf' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
[linux-2.6-block.git] / arch / arm64 / kernel / process.c
index 80624829db613961b7a088ce18d8591361b448c7..48eea6866c677e0746dc786dde96bb7779583ea4 100644 (file)
@@ -265,9 +265,6 @@ int copy_thread(unsigned long clone_flags, unsigned long stack_start,
                if (stack_start) {
                        if (is_compat_thread(task_thread_info(p)))
                                childregs->compat_sp = stack_start;
-                       /* 16-byte aligned stack mandatory on AArch64 */
-                       else if (stack_start & 15)
-                               return -EINVAL;
                        else
                                childregs->sp = stack_start;
                }
@@ -382,13 +379,14 @@ unsigned long arch_align_stack(unsigned long sp)
        return sp & ~0xf;
 }
 
-static unsigned long randomize_base(unsigned long base)
-{
-       unsigned long range_end = base + (STACK_RND_MASK << PAGE_SHIFT) + 1;
-       return randomize_range(base, range_end, 0) ? : base;
-}
-
 unsigned long arch_randomize_brk(struct mm_struct *mm)
 {
-       return randomize_base(mm->brk);
+       unsigned long range_end = mm->brk;
+
+       if (is_compat_task())
+               range_end += 0x02000000;
+       else
+               range_end += 0x40000000;
+
+       return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
 }