diff options
author | Max Filippov <jcmvbkbc@gmail.com> | 2019-01-02 01:08:32 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2019-03-13 14:03:10 -0700 |
commit | 1b0322ebab523163f6b1ca189191c125bf58ebbc (patch) | |
tree | 032ae898e5fdb9537eda855f11286076460cd964 /arch | |
parent | af46f4c0372aea3813afa6f2d9debb39346655c3 (diff) | |
download | linux-stable-1b0322ebab523163f6b1ca189191c125bf58ebbc.tar.gz linux-stable-1b0322ebab523163f6b1ca189191c125bf58ebbc.tar.bz2 linux-stable-1b0322ebab523163f6b1ca189191c125bf58ebbc.zip |
xtensa: fix get_wchan
commit d90b88fd3653f1fb66ecc6571b860d5a5749fa56 upstream.
Stack unwinding is implemented incorrectly in xtensa get_wchan: instead
of extracting a0 and a1 registers from the spill location under the
stack pointer it extracts a word pointed to by the stack pointer and
subtracts 4 or 3 from it.
Cc: stable@vger.kernel.org
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/xtensa/kernel/process.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/xtensa/kernel/process.c b/arch/xtensa/kernel/process.c index f1c46bc5d465..e48a2137e87a 100644 --- a/arch/xtensa/kernel/process.c +++ b/arch/xtensa/kernel/process.c @@ -314,8 +314,8 @@ unsigned long get_wchan(struct task_struct *p) /* Stack layout: sp-4: ra, sp-3: sp' */ - pc = MAKE_PC_FROM_RA(*(unsigned long*)sp - 4, sp); - sp = *(unsigned long *)sp - 3; + pc = MAKE_PC_FROM_RA(SPILL_SLOT(sp, 0), sp); + sp = SPILL_SLOT(sp, 1); } while (count++ < 16); return 0; } |