[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