]> git.ipfire.org Git - people/arne_f/kernel.git/commitdiff
xtensa: fix get_wchan
authorMax Filippov <jcmvbkbc@gmail.com>
Wed, 2 Jan 2019 09:08:32 +0000 (01:08 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 10 Mar 2019 06:17:21 +0000 (07:17 +0100)
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>
arch/xtensa/kernel/process.c

index 4bb68133a72af93ad00e82d08abb7d26a783b86d..5a0e0bd68b769e1d4c3c1fb2c36b92bb5a8eb3d9 100644 (file)
@@ -320,8 +320,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;
 }