| From 21a4e03e0292dac8e0777d1ab89df9539bb21a69 Mon Sep 17 00:00:00 2001 |
| From: David S. Miller <davem@davemloft.net> |
| Date: Sun, 17 Aug 2008 20:39:08 -0700 |
| Subject: sparc64: Fix recursion in stack overflow detection handling. |
| Message-Id: <20080817.212911.193702300.davem@davemloft.net> |
| |
| [ Upstream commit c7498081a6f5d96c9f3243b6b5e020352903bfd2 ] |
| |
| The calls down into prom_printf() when we detect an overflowed stack |
| can recurse again since the overflow stack will be "below" the current |
| kernel stack limit. |
| |
| Prevent this by just returning straight if we are on the stack |
| overflow safe stack already. |
| |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/sparc64/lib/mcount.S | 17 ++++++++++++++--- |
| 1 file changed, 14 insertions(+), 3 deletions(-) |
| |
| --- a/arch/sparc64/lib/mcount.S |
| +++ b/arch/sparc64/lib/mcount.S |
| @@ -45,12 +45,23 @@ _mcount: |
| sub %g3, STACK_BIAS, %g3 |
| cmp %sp, %g3 |
| bg,pt %xcc, 1f |
| - sethi %hi(panicstring), %g3 |
| + nop |
| + /* If we are already on ovstack, don't hop onto it |
| + * again, we are already trying to output the stack overflow |
| + * message. |
| + */ |
| sethi %hi(ovstack), %g7 ! cant move to panic stack fast enough |
| or %g7, %lo(ovstack), %g7 |
| - add %g7, OVSTACKSIZE, %g7 |
| + add %g7, OVSTACKSIZE, %g3 |
| + sub %g3, STACK_BIAS + 192, %g3 |
| sub %g7, STACK_BIAS, %g7 |
| - mov %g7, %sp |
| + cmp %sp, %g7 |
| + blu,pn %xcc, 2f |
| + cmp %sp, %g3 |
| + bleu,pn %xcc, 1f |
| + nop |
| +2: mov %g3, %sp |
| + sethi %hi(panicstring), %g3 |
| call prom_printf |
| or %g3, %lo(panicstring), %o0 |
| call prom_halt |