forked from OSchip/llvm-project
[compiler-rt] Fall back to internal_uname() when called early
Summary:
Commit 5f5fb56c68
("[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
This commit is contained in:
parent
0c42539df3
commit
fad47d2225
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue