[compiler-rt] 009e176 - [sanitizer_common] Fix TgKill on Solaris (#98000)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 16 06:50:54 PDT 2024


Author: Rainer Orth
Date: 2024-07-16T15:50:51+02:00
New Revision: 009e176b880f660e7b01dda1f665a1b221375fd8

URL: https://github.com/llvm/llvm-project/commit/009e176b880f660e7b01dda1f665a1b221375fd8
DIFF: https://github.com/llvm/llvm-project/commit/009e176b880f660e7b01dda1f665a1b221375fd8.diff

LOG: [sanitizer_common] Fix TgKill on Solaris (#98000)

While working on safestack on Solaris, I noticed that the `TgKill`
implementation is wrong here: `TgKill` is supposed to return `-1` on
error, while `thr_kill` returns `errno` instead. This patch compensates
for that.

This went unnoticed so far since `TgKill` has been unused.

Tested on `amd64-pc-solaris2.11` and `sparcv9-sun-solaris2.11` together
with a subsequent patch to make safestack actually work on Solaris.

Added: 
    

Modified: 
    compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
index f7f5698a5f32d..7935c88204a05 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
@@ -574,7 +574,9 @@ int TgKill(pid_t pid, tid_t tid, int sig) {
   return internal_syscall(SYSCALL(thr_kill2), pid, tid, sig);
 #    elif SANITIZER_SOLARIS
   (void)pid;
-  return thr_kill(tid, sig);
+  errno = thr_kill(tid, sig);
+  // TgKill is expected to return -1 on error, not an errno.
+  return errno != 0 ? -1 : 0;
 #    endif
 }
 #  endif


        


More information about the llvm-commits mailing list