From: Ilya Leoshkevich Date: Fri, 27 Mar 2020 19:23:20 +0000 (+0100) Subject: [compiler-rt] Fall back to internal_uname() when called early X-Git-Tag: llvmorg-12-init~10873 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fad47d222561f0672223b0b3304ff1c739cb3288;p=platform%2Fupstream%2Fllvm.git [compiler-rt] Fall back to internal_uname() when called early Summary: Commit 5f5fb56c68e4 ("[compiler-rt] Intercept the uname() function") broke sanitizer-x86_64-linux and clang-cmake-thumbv7-full-sh (again) builds: http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/26313 http://lab.llvm.org:8011/builders/clang-cmake-thumbv7-full-sh/builds/4324 The reason is that uname() can be called as early as __pthread_initialize_minimal_internal(). When intercepted, this triggers ASan initialization, which eventually calls dlerror(), which in turn uses pthreads, causing all sorts of issues. Fix by falling back to internal_uname() when interceptor runs before ASan is initialized. This is only for Linux at the moment. Reviewers: eugenis, vitalybuka Reviewed By: eugenis Subscribers: dberris, #sanitizers, pcc Tags: #sanitizers Differential Revision: https://reviews.llvm.org/D76919 --- diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc index 1671273..0ca86de 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -9748,6 +9748,10 @@ INTERCEPTOR(int, sigaltstack, void *ss, void *oss) { #if SANITIZER_INTERCEPT_UNAME INTERCEPTOR(int, uname, struct utsname *utsname) { +#if SANITIZER_LINUX + if (COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED) + return internal_uname(utsname); +#endif void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, uname, utsname); int res = REAL(uname)(utsname);