aboutsummaryrefslogtreecommitdiff
path: root/arch/sparc64/kernel/stacktrace.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-08-08 11:14:32 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-08-08 11:14:32 -0700
commit8d659f5e43c5db2630e85f507b7384365e9e1c1e (patch)
treec99b00949268cedbbc4bc1f3e01b058e67033c2e /arch/sparc64/kernel/stacktrace.c
parent9da1f7e69aa4545d45d3435865c56f1e67c4b26a (diff)
parent433c5f706856689be25928a99636e724fb3ea7cf (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6: sparc64: Fix end-of-stack checking in save_stack_trace(). sparc: don't use asm/of_device.h sparc64: Use kernel/uid16.c helpers instead of own copy. of/sparc: remove include of linux/of_platform.h from asm/of_platform.h sparc: i8042-sparcio.h: fix warning
Diffstat (limited to 'arch/sparc64/kernel/stacktrace.c')
-rw-r--r--arch/sparc64/kernel/stacktrace.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/sparc64/kernel/stacktrace.c b/arch/sparc64/kernel/stacktrace.c
index b3e3737750d..e9d7f0660f2 100644
--- a/arch/sparc64/kernel/stacktrace.c
+++ b/arch/sparc64/kernel/stacktrace.c
@@ -26,13 +26,15 @@ void save_stack_trace(struct stack_trace *trace)
/* Bogus frame pointer? */
if (fp < (thread_base + sizeof(struct thread_info)) ||
- fp >= (thread_base + THREAD_SIZE))
+ fp > (thread_base + THREAD_SIZE - sizeof(struct sparc_stackf)))
break;
sf = (struct sparc_stackf *) fp;
regs = (struct pt_regs *) (sf + 1);
- if ((regs->magic & ~0x1ff) == PT_REGS_MAGIC) {
+ if (((unsigned long)regs <=
+ (thread_base + THREAD_SIZE - sizeof(*regs))) &&
+ (regs->magic & ~0x1ff) == PT_REGS_MAGIC) {
if (!(regs->tstate & TSTATE_PRIV))
break;
pc = regs->tpc;