forked from OSchip/llvm-project
libunwind: Don't attempt to authenticate a null return address.
Null return addresses can appear at the bottom of the stack (i.e. the frame corresponding to the entry point). Authenticating these addresses will set the error code in the address, which will lead to a segfault in the sigreturn trampoline detection code. Fix this problem by not authenticating null addresses. Differential Revision: https://reviews.llvm.org/D96560
This commit is contained in:
parent
962b73dd0f
commit
cddc53ef08
|
@ -213,7 +213,8 @@ int DwarfInstructions<A, R>::stepWithDwarf(A &addressSpace, pint_t pc,
|
|||
// restored. autia1716 is used instead of autia as autia1716 assembles
|
||||
// to a NOP on pre-v8.3a architectures.
|
||||
if ((R::getArch() == REGISTERS_ARM64) &&
|
||||
prolog.savedRegisters[UNW_ARM64_RA_SIGN_STATE].value) {
|
||||
prolog.savedRegisters[UNW_ARM64_RA_SIGN_STATE].value &&
|
||||
returnAddress != 0) {
|
||||
#if !defined(_LIBUNWIND_IS_NATIVE_ONLY)
|
||||
return UNW_ECROSSRASIGNING;
|
||||
#else
|
||||
|
|
Loading…
Reference in New Issue