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]>
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>
---

 linux-2.6.11-paolo/arch/um/kernel/trap_kern.c        |    2 ++
 linux-2.6.11-paolo/include/asm-um/processor-i386.h   |    3 +++
 linux-2.6.11-paolo/include/asm-um/processor-x86_64.h |    3 +++
 3 files changed, 8 insertions(+)

diff -puN arch/um/kernel/trap_kern.c~uml-stack-expansion 
arch/um/kernel/trap_kern.c
--- linux-2.6.11/arch/um/kernel/trap_kern.c~uml-stack-expansion 2005-02-04 
06:18:18.689557088 +0100
+++ linux-2.6.11-paolo/arch/um/kernel/trap_kern.c       2005-02-04 
06:18:18.739549488 +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;
 
diff -puN include/asm-um/processor-i386.h~uml-stack-expansion 
include/asm-um/processor-i386.h
--- linux-2.6.11/include/asm-um/processor-i386.h~uml-stack-expansion    
2005-02-04 06:18:18.726551464 +0100
+++ linux-2.6.11-paolo/include/asm-um/processor-i386.h  2005-02-04 
06:18:18.739549488 +0100
@@ -27,6 +27,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(&current->thread.regs.regs))
+
 #include "asm/processor-generic.h"
 
 #endif
diff -puN include/asm-um/processor-x86_64.h~uml-stack-expansion 
include/asm-um/processor-x86_64.h
--- linux-2.6.11/include/asm-um/processor-x86_64.h~uml-stack-expansion  
2005-02-04 06:18:18.736549944 +0100
+++ linux-2.6.11-paolo/include/asm-um/processor-x86_64.h        2005-02-04 
06:18:18.740549336 +0100
@@ -17,6 +17,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(&current->thread.regs.regs))
+
 #include "asm/processor-generic.h"
 
 #endif
_
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to