diff options
author | Rabin Vincent <rabin.vincent@stericsson.com> | 2011-02-09 05:35:12 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2011-02-10 10:29:03 -0500 |
commit | cb06199b1df492fcfbaedd2256b5054f944b664f (patch) | |
tree | 910e7c88876d5e56be4d4f96dc1ab99868ec047c /arch/arm/oprofile | |
parent | 4a9cb360197684a861bc06f06d33d5fcc8ffcbf5 (diff) |
ARM: 6654/1: perf/oprofile: fix off-by-one in stack check
Since tail is the previous fp - 1, we need to compare the new fp with tail + 1
to ensure that we don't end up passing in the same tail again, in order to
avoid a potential infinite loop in the perf interrupt handler (which has been
observed to occur). A similar fix seems to be needed in the OProfile code.
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Rabin Vincent <rabin.vincent@stericsson.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/oprofile')
-rw-r--r-- | arch/arm/oprofile/common.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm/oprofile/common.c b/arch/arm/oprofile/common.c index 8aa974491dfc..6adda2b5fa31 100644 --- a/arch/arm/oprofile/common.c +++ b/arch/arm/oprofile/common.c | |||
@@ -85,7 +85,7 @@ static struct frame_tail* user_backtrace(struct frame_tail *tail) | |||
85 | 85 | ||
86 | /* frame pointers should strictly progress back up the stack | 86 | /* frame pointers should strictly progress back up the stack |
87 | * (towards higher addresses) */ | 87 | * (towards higher addresses) */ |
88 | if (tail >= buftail[0].fp) | 88 | if (tail + 1 >= buftail[0].fp) |
89 | return NULL; | 89 | return NULL; |
90 | 90 | ||
91 | return buftail[0].fp-1; | 91 | return buftail[0].fp-1; |