summaryrefslogtreecommitdiffstats
path: root/compiler-rt/test/asan
diff options
context:
space:
mode:
authorAlexander Richardson <arichardson.kde@gmail.com>2019-07-31 16:31:55 +0000
committerAlexander Richardson <arichardson.kde@gmail.com>2019-07-31 16:31:55 +0000
commita4ea27de9287744c5584e5f4eb755030661e665d (patch)
tree97088c8ef851da917bbabd936efbd0393e436df7 /compiler-rt/test/asan
parentaf44f18ad66b4f7bbe6a8f6ffa29637a4a5aeea1 (diff)
downloadbcm5719-llvm-a4ea27de9287744c5584e5f4eb755030661e665d.tar.gz
bcm5719-llvm-a4ea27de9287744c5584e5f4eb755030661e665d.zip
[Sanitizer][ASAN][MSAN] Fix infinite recursion on FreeBSD
Summary: MSAN was broken on FreeBSD by https://reviews.llvm.org/D55703: after this change accesses to the key variable call __tls_get_addr, which is intercepted. The interceptor then calls GetCurrentThread which calls MsanTSDGet which again calls __tls_get_addr, etc... Using the default implementation in the SANITIZER_FREEBSD case fixes MSAN for me. I then applied the same change to ASAN (introduced in https://reviews.llvm.org/D55596) but that did not work yet. In the ASAN case, we get infinite recursion again during initialization, this time because calling pthread_key_create() early on results in infinite recursion. pthread_key_create() calls sysctlbyname() which is intercepted but COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED returns true, so the interceptor calls internal_sysctlbyname() which then ends up calling the interceptor again. I fixed this issue by using dlsym() to get the libc version of sysctlbyname() instead. This fixes https://llvm.org/PR40761 Reviewers: vitalybuka, krytarowski, devnexen, dim, bsdjhb, #sanitizers, MaskRay Reviewed By: MaskRay Subscribers: MaskRay, emaste, kubamracek, jfb, #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D65221 llvm-svn: 367442
Diffstat (limited to 'compiler-rt/test/asan')
-rw-r--r--compiler-rt/test/asan/TestCases/Posix/fread_fwrite.cc3
-rw-r--r--compiler-rt/test/asan/TestCases/Posix/tsd_dtor_leak.cc2
2 files changed, 0 insertions, 5 deletions
diff --git a/compiler-rt/test/asan/TestCases/Posix/fread_fwrite.cc b/compiler-rt/test/asan/TestCases/Posix/fread_fwrite.cc
index 64024886017..c0629260418 100644
--- a/compiler-rt/test/asan/TestCases/Posix/fread_fwrite.cc
+++ b/compiler-rt/test/asan/TestCases/Posix/fread_fwrite.cc
@@ -1,9 +1,6 @@
// RUN: %clangxx_asan -g %s -o %t
// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-FWRITE
// RUN: not %run %t 1 2>&1 | FileCheck %s --check-prefix=CHECK-FREAD
-//
-// On FreeBSD stack overflow error instead
-// XFAIL: freebsd
#include <stdio.h>
#include <stdlib.h>
diff --git a/compiler-rt/test/asan/TestCases/Posix/tsd_dtor_leak.cc b/compiler-rt/test/asan/TestCases/Posix/tsd_dtor_leak.cc
index 26109fe1a5f..860f3459e5a 100644
--- a/compiler-rt/test/asan/TestCases/Posix/tsd_dtor_leak.cc
+++ b/compiler-rt/test/asan/TestCases/Posix/tsd_dtor_leak.cc
@@ -3,8 +3,6 @@
// RUN: %clangxx_asan -O1 %s -pthread -o %t
// RUN: %env_asan_opts=quarantine_size_mb=0 %run %t
// XFAIL: x86_64-netbsd
-// Assertion fails
-// XFAIL: x86_64-freebsd
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
OpenPOWER on IntegriCloud