Explorar o código

[PATCH] x86_64: enlarge window for stack growth

Allow stack growth so the 'enter' instruction works.  Also
fixes problem in compat_sys_kexec_load() which could allocate
more than 128 bytes using compat_alloc_user_space().

Signed-off-by: Chuck Ebbert <76306.1226@compuserve.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Chuck Ebbert %!s(int64=19) %!d(string=hai) anos
pai
achega
03fdc2c277
Modificáronse 1 ficheiros con 4 adicións e 2 borrados
  1. 4 2
      arch/x86_64/mm/fault.c

+ 4 - 2
arch/x86_64/mm/fault.c

@@ -410,8 +410,10 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs,
 	if (!(vma->vm_flags & VM_GROWSDOWN))
 	if (!(vma->vm_flags & VM_GROWSDOWN))
 		goto bad_area;
 		goto bad_area;
 	if (error_code & 4) {
 	if (error_code & 4) {
-		// XXX: align red zone size with ABI 
-		if (address + 128 < regs->rsp)
+		/* Allow userspace just enough access below the stack pointer
+		 * to let the 'enter' instruction work.
+		 */
+		if (address + 65536 + 32 * sizeof(unsigned long) < regs->rsp)
 			goto bad_area;
 			goto bad_area;
 	}
 	}
 	if (expand_stack(vma, address))
 	if (expand_stack(vma, address))