[compiler-rt] r340856 - SafeStack: Fix thread liveness check on *BSD

Vlad Tsyrklevich via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 28 11:30:03 PDT 2018


Author: vlad.tsyrklevich
Date: Tue Aug 28 11:30:03 2018
New Revision: 340856

URL: http://llvm.org/viewvc/llvm-project?rev=340856&view=rev
Log:
SafeStack: Fix thread liveness check on *BSD

Summary:
The Linux/BSD system call interfaces report errors differently, use the
internal_iserror() function to correctly check errors on either.

Reviewers: eugenis

Reviewed By: eugenis

Subscribers: delcypher, llvm-commits, #sanitizers, krytarowski, kcc, devnexen

Differential Revision: https://reviews.llvm.org/D51368

Modified:
    compiler-rt/trunk/lib/safestack/safestack.cc

Modified: compiler-rt/trunk/lib/safestack/safestack.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/safestack/safestack.cc?rev=340856&r1=340855&r2=340856&view=diff
==============================================================================
--- compiler-rt/trunk/lib/safestack/safestack.cc (original)
+++ compiler-rt/trunk/lib/safestack/safestack.cc Tue Aug 28 11:30:03 2018
@@ -183,7 +183,10 @@ static void thread_cleanup_handler(void
   thread_stack_ll **stackp = &temp_stacks;
   while (*stackp) {
     thread_stack_ll *stack = *stackp;
-    if (stack->pid != pid || TgKill(stack->pid, stack->tid, 0) == -ESRCH) {
+    int error;
+    if (stack->pid != pid ||
+        (internal_iserror(TgKill(stack->pid, stack->tid, 0), &error) &&
+         error == ESRCH)) {
       UnmapOrDie(stack->stack_base, stack->size);
       *stackp = stack->next;
       free(stack);




More information about the llvm-commits mailing list