[compiler-rt] 987f153 - [msan] Fix sigaltstack false positive.

Evgenii Stepanov via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 23 16:19:24 PDT 2020


Author: Evgenii Stepanov
Date: 2020-03-23T16:17:31-07:00
New Revision: 987f153929e813db1ea7e3354fd7a0b6b4adf4c0

URL: https://github.com/llvm/llvm-project/commit/987f153929e813db1ea7e3354fd7a0b6b4adf4c0
DIFF: https://github.com/llvm/llvm-project/commit/987f153929e813db1ea7e3354fd7a0b6b4adf4c0.diff

LOG: [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.

Added: 
    

Modified: 
    compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc
    compiler-rt/test/msan/sigaltstack.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc
index 8267b3bb4dd0..1671273174de 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 4b97bb461d47..c1b8b7eefee1 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;
 }


        


More information about the llvm-commits mailing list