[compiler-rt] ef2ff55 - tsan: fix latent bug in shadow computation

Dmitry Vyukov via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 13 07:39:01 PDT 2021


Author: Dmitry Vyukov
Date: 2021-08-13T16:38:56+02:00
New Revision: ef2ff556a2fe1e5329c3e54c2db83d46e23fc439

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

LOG: tsan: fix latent bug in shadow computation

We use kShadowCnt (number of shadow cells per application granule)
when computing shadow, but it's wrong. We need the ratio
between shadow and app memory (how much shadow is larger than app memory),
which is kShadowMultiplier.
Currently both are equal to 4, so it works fine.
Use the correct constant.

Reviewed By: melver

Differential Revision: https://reviews.llvm.org/D108033

Added: 
    

Modified: 
    compiler-rt/lib/tsan/rtl/tsan_platform.h

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/tsan/rtl/tsan_platform.h b/compiler-rt/lib/tsan/rtl/tsan_platform.h
index e36ef21f7e12..30a1be5252e7 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_platform.h
+++ b/compiler-rt/lib/tsan/rtl/tsan_platform.h
@@ -840,7 +840,7 @@ struct MemToShadowImpl {
     DCHECK(IsAppMemImpl::Apply<Mapping>(x));
     return (((x) & ~(Mapping::kShadowMsk | (kShadowCell - 1))) ^
             Mapping::kShadowXor) *
-               kShadowCnt +
+               kShadowMultiplier +
            Mapping::kShadowAdd;
   }
 };
@@ -873,7 +873,8 @@ struct ShadowToMemImpl {
     // a bijection, so we try to restore the address as belonging to
     // low/mid/high range consecutively and see if shadow->app->shadow mapping
     // gives us the same address.
-    uptr p = ((sp - Mapping::kShadowAdd) / kShadowCnt) ^ Mapping::kShadowXor;
+    uptr p =
+        ((sp - Mapping::kShadowAdd) / kShadowMultiplier) ^ Mapping::kShadowXor;
     if (p >= Mapping::kLoAppMemBeg && p < Mapping::kLoAppMemEnd &&
         MemToShadowImpl::Apply<Mapping>(p) == sp)
       return p;


        


More information about the llvm-commits mailing list