aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgenii Stepanov <eugenis@google.com>2020-03-23 16:15:58 -0700
committerEvgenii Stepanov <eugenis@google.com>2020-03-23 16:17:31 -0700
commit987f153929e813db1ea7e3354fd7a0b6b4adf4c0 (patch)
treedc177127030f916abd7a598d61a9fafdd3221a54
parent2b4027f2b8d8224266cc2a423d9ccd74f6800711 (diff)
downloadllvm-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.inc3
-rw-r--r--compiler-rt/test/msan/sigaltstack.cpp7
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;
}