From: KAMEZAWA Hiroyuki Date: Fri, 23 Mar 2007 03:17:46 +0000 (+0900) Subject: [IA64] bugfix stack layout upside-down X-Git-Tag: v2.6.21-rc6~46^2~2 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=83d2cd3de48a7fb73838c45145780cfa9b1f61fd;p=linux-2.6 [IA64] bugfix stack layout upside-down ia64 expects following vm layout: == low memory [register-stack grows up] [memory-stack grows down] == high memory But the code assigns the base of the register stack at the maximum stack size offset from the fixed address where the stack *might* start. Stack randomization will result in the memory stack starting at a lower address than this, and if the user has set a low stack limit with "ulimit -s", then you can end up with the register stack above the memory stack (or if you were very unlucky right on top of it!). Fix: Calculate the base address for the register stack starting from the actual address of the memory stack. Signed-off-by: KAMEZAWA Hiroyuki Signed-off-by: Tony Luck --- diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index c8da621aab..4f36987eea 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c @@ -155,7 +155,7 @@ ia64_set_rbs_bot (void) if (stack_size > MAX_USER_STACK_SIZE) stack_size = MAX_USER_STACK_SIZE; - current->thread.rbs_bot = STACK_TOP - stack_size; + current->thread.rbs_bot = PAGE_ALIGN(current->mm->start_stack - stack_size); } /*