* [patch 4/8] uml: disallow stack access below $esp like i386 / x86_64 [before 2.6.11]
@ 2005-02-04 18:35 blaisorblade
0 siblings, 0 replies; only message in thread
From: blaisorblade @ 2005-02-04 18:35 UTC (permalink / raw)
To: akpm; +Cc: linux-kernel, jdike, user-mode-linux-devel, blaisorblade,
bstroesser
From: Bodo Stroesser <bstroesser@fujitsu-siemens.com>
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 <bstroesser@fujitsu-siemens.com>
Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
---
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(¤t->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(¤t->thread.regs.regs))
+
#include "asm/processor-generic.h"
#endif
_
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2005-02-04 20:04 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-02-04 18:35 [patch 4/8] uml: disallow stack access below $esp like i386 / x86_64 [before 2.6.11] blaisorblade
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox