Skip to content

Commit

Permalink
[compiler-rt] Fall back to internal_uname() when called early
Browse files Browse the repository at this point in the history
Summary:
Commit 5f5fb56 ("[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
  • Loading branch information
iii-i committed Mar 28, 2020
1 parent 0c42539 commit fad47d2
Showing 1 changed file with 4 additions and 0 deletions.
Expand Up @@ -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);
Expand Down

0 comments on commit fad47d2

Please sign in to comment.