[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