diff options
author | Evgenii Stepanov <eugenis@google.com> | 2020-03-23 16:15:58 -0700 |
---|---|---|
committer | Evgenii Stepanov <eugenis@google.com> | 2020-03-23 16:17:31 -0700 |
commit | 987f153929e813db1ea7e3354fd7a0b6b4adf4c0 (patch) | |
tree | dc177127030f916abd7a598d61a9fafdd3221a54 | |
parent | 2b4027f2b8d8224266cc2a423d9ccd74f6800711 (diff) | |
download | llvm-987f153929e813db1ea7e3354fd7a0b6b4adf4c0.zip llvm-987f153929e813db1ea7e3354fd7a0b6b4adf4c0.tar.gz llvm-987f153929e813db1ea7e3354fd7a0b6b4adf4c0.tar.bz2 |
[msan] Fix sigaltstack false positive.
struct stack_t on Linux x86_64 has internal padding which may be left
uninitialized. The check should be replaced with multiple checks for
individual fields of the struct. For now, remove the check altogether.
-rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc | 3 | ||||
-rw-r--r-- | compiler-rt/test/msan/sigaltstack.cpp | 7 |
2 files changed, 1 insertions, 9 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc index 8267b3b..1671273 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc @@ -9735,9 +9735,6 @@ INTERCEPTOR(void, qsort_r, void *base, SIZE_T nmemb, SIZE_T size, INTERCEPTOR(int, sigaltstack, void *ss, void *oss) { void *ctx; COMMON_INTERCEPTOR_ENTER(ctx, sigaltstack, ss, oss); - if (ss != nullptr) { - COMMON_INTERCEPTOR_READ_RANGE(ctx, ss, struct_stack_t_sz); - } int r = REAL(sigaltstack)(ss, oss); if (r == 0 && oss != nullptr) { COMMON_INTERCEPTOR_WRITE_RANGE(ctx, oss, struct_stack_t_sz); diff --git a/compiler-rt/test/msan/sigaltstack.cpp b/compiler-rt/test/msan/sigaltstack.cpp index 4b97bb4..c1b8b7e 100644 --- a/compiler-rt/test/msan/sigaltstack.cpp +++ b/compiler-rt/test/msan/sigaltstack.cpp @@ -1,4 +1,4 @@ -// RUN: %clangxx_msan -O0 -g %s -o %t && not %run %t +// RUN: %clangxx_msan -O0 -g %s -o %t && %run %t // #include <signal.h> #include <assert.h> @@ -11,10 +11,5 @@ int main(void) { assert(sigaltstack(nullptr, &old_ss) == 0); __msan_check_mem_is_initialized(&old_ss, sizeof(stack_t)); - stack_t ss; - sigaltstack(&ss, nullptr); -// CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value -// CHECK: in main {{.*}}sigaltstack.cpp:15 - return 0; } |