From: Bodo Stroesser <[EMAIL PROTECTED]>
When a page fault occurs on an address below the stack-vma,
UML tries to expand the stack.
On i386 and x86_64, the failing address is compared to the
current userspace stack pointer. If the failing address is
below "esp-32" resp. "rsp-128", stack expansion is not
allowed, and a SIGSEGV is given to the user.
This patch makes UML behave like i386/x86_64.
Signed-off-by: Bodo Stroesser <[EMAIL PROTECTED]>
---
diff -puN include/asm-um/processor-i386.h~stack_grow_check_SP
include/asm-um/processor-i386.h
--- linux-2.6.10-mm3/include/asm-um/processor-i386.h~stack_grow_check_SP
2005-01-17 14:39:32.349020626 +0100
+++ linux-2.6.10-mm3-root/include/asm-um/processor-i386.h 2005-01-17
15:13:54.030087304 +0100
@@ -32,6 +32,9 @@ struct arch_thread {
#define current_text_addr() \
({ void *pc; __asm__("movl $1f,%0\n1:":"=g" (pc)); pc; })
+#define ARCH_IS_STACKGROW(address) \
+ (address + 32 >= UPT_SP(¤t->thread.regs.regs))
+
#include "asm/processor-generic.h"
#endif
diff -puN include/asm-um/processor-x86_64.h~stack_grow_check_SP
include/asm-um/processor-x86_64.h
--- linux-2.6.10-mm3/include/asm-um/processor-x86_64.h~stack_grow_check_SP
2005-01-17 14:39:51.373082903 +0100
+++ linux-2.6.10-mm3-root/include/asm-um/processor-x86_64.h 2005-01-17
15:13:41.320365765 +0100
@@ -25,6 +25,9 @@ struct arch_thread {
#define current_text_addr() \
({ void *pc; __asm__("movq $1f,%0\n1:":"=g" (pc)); pc; })
+#define ARCH_IS_STACKGROW(address) \
+ (address + 128 >= UPT_SP(¤t->thread.regs.regs))
+
#include "asm/processor-generic.h"
#endif
diff -puN arch/um/kernel/trap_kern.c~stack_grow_check_SP
arch/um/kernel/trap_kern.c
--- linux-2.6.10-mm3/arch/um/kernel/trap_kern.c~stack_grow_check_SP
2005-01-17 14:45:34.450017573 +0100
+++ linux-2.6.10-mm3-root/arch/um/kernel/trap_kern.c 2005-01-17
14:53:23.114777237 +0100
@@ -48,6 +48,8 @@ int handle_page_fault(unsigned long addr
goto good_area;
else if(!(vma->vm_flags & VM_GROWSDOWN))
goto out;
+ else if(!ARCH_IS_STACKGROW(address))
+ goto out;
else if(expand_stack(vma, address))
goto out;
_
-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
User-mode-linux-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel