[compiler-rt] f8e8f0a - [TSan] Support pointer authentication in setjmp/longjmp interceptors
Julian Lettner via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 18 11:46:41 PDT 2020
Author: Julian Lettner
Date: 2020-03-18T11:46:23-07:00
New Revision: f8e8f0a6038bd761da237b3e7dee5f94b7041b5a
URL: https://github.com/llvm/llvm-project/commit/f8e8f0a6038bd761da237b3e7dee5f94b7041b5a
DIFF: https://github.com/llvm/llvm-project/commit/f8e8f0a6038bd761da237b3e7dee5f94b7041b5a.diff
LOG: [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
Added:
Modified:
compiler-rt/lib/tsan/rtl/tsan_platform_mac.cpp
Removed:
################################################################################
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 <errno.h>
#include <sched.h>
+#if __has_feature(ptrauth_calls)
+#include <ptrauth.h>
+#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;
}
More information about the llvm-commits
mailing list