From f8e8f0a6038bd761da237b3e7dee5f94b7041b5a Mon Sep 17 00:00:00 2001 From: Julian Lettner Date: Mon, 16 Mar 2020 11:27:15 -0700 Subject: [PATCH] [TSan] Support pointer authentication in setjmp/longjmp interceptors arm64e adds support for pointer authentication, which was adopted by libplatform to harden setjmp/longjmp and friends. We need to teach the TSan interceptors for those functions about this. Reviewed By: kubamracek Differential Revision: https://reviews.llvm.org/D76257 --- compiler-rt/lib/tsan/rtl/tsan_platform_mac.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform_mac.cpp b/compiler-rt/lib/tsan/rtl/tsan_platform_mac.cpp index ae65dd3fd995..fdda7013fe5c 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_platform_mac.cpp +++ b/compiler-rt/lib/tsan/rtl/tsan_platform_mac.cpp @@ -41,6 +41,10 @@ #include #include +#if __has_feature(ptrauth_calls) +#include +#endif + namespace __tsan { #if !SANITIZER_GO @@ -274,6 +278,10 @@ void InitializePlatform() { uptr ExtractLongJmpSp(uptr *env) { uptr mangled_sp = env[LONG_JMP_SP_ENV_SLOT]; uptr sp = mangled_sp ^ longjmp_xor_key; +#if __has_feature(ptrauth_calls) + sp = (uptr)ptrauth_auth_data((void *)sp, ptrauth_key_asdb, + ptrauth_string_discriminator("sp")); +#endif return sp; }