ARM: unwind: set frame.pc correctly for current-thread unwinding
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Wed, 9 Mar 2022 12:06:02 +0000 (12:06 +0000)
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Fri, 11 Mar 2022 10:55:28 +0000 (10:55 +0000)
commitc46c2c9b43f4f08f20dc06417fbf7091e4ca6d34
tree1ff8826b766f742c3d7e8d8b7c00e6ffad105eed
parent6845d64d51cf69c096176e34864e161429bcb664
ARM: unwind: set frame.pc correctly for current-thread unwinding

When e.g. a WARN_ON() is encountered, we attempt to unwind the current
thread. To do this, we set frame.pc to unwind_backtrace, which means it
points at the beginning of the function. However, the rest of the state
is initialised from within the function, which means the function
prologue has already been run.

This can be confusing, and with a recent patch from Ard, can result in
the unwinder misbehaving if we want to be strict about the PC value.

If we correctly initialise the state so it is self-consistent (in other
words, set frame.pc to the location we are initialising it) then we
eliminate this confusion, and avoid possible future issues.

Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
arch/arm/kernel/return_address.c
arch/arm/kernel/stacktrace.c
arch/arm/kernel/unwind.c