diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2015-12-16 00:18:04 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2015-12-16 00:18:04 +0000 |
commit | b7eb55ab33ee827f2113650270a2f4512b215781 (patch) | |
tree | 5465263dc13f0dc5a5247c8d870c693fd94078be | |
parent | 7a7e357f3e2b05d0d7aa2973a6d46110a94df8a3 (diff) | |
download | compiler-rt-b7eb55ab33ee827f2113650270a2f4512b215781.tar.gz |
[cfi] Fix shadow sanity check.
The current check may break if the starting address in fill_shadow is
not page-aligned.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@255725 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/cfi/cfi.cc | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/cfi/cfi.cc b/lib/cfi/cfi.cc index 27b745853..3191b5683 100644 --- a/lib/cfi/cfi.cc +++ b/lib/cfi/cfi.cc @@ -88,11 +88,12 @@ static void fill_shadow(uptr begin, uptr end, uptr cfi_check) { *s = sv; // Sanity checks. - for (; p < end; p += kShadowAlign) { - assert((uptr)ShadowValue::load(p).get_cfi_check() == cfi_check); - assert((uptr)ShadowValue::load(p + kShadowAlign / 2).get_cfi_check() == + uptr q = p & ~(kShadowAlign - 1); + for (; q < end; q += kShadowAlign) { + assert((uptr)ShadowValue::load(q).get_cfi_check() == cfi_check); + assert((uptr)ShadowValue::load(q + kShadowAlign / 2).get_cfi_check() == cfi_check); - assert((uptr)ShadowValue::load(p + kShadowAlign - 1).get_cfi_check() == + assert((uptr)ShadowValue::load(q + kShadowAlign - 1).get_cfi_check() == cfi_check); } } |