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 | b99d6c8b2acae9cf6d68dcf4c44eb625b530bdd5 (patch) | |
| tree | 17cec7d756ad27db5be79db5f9c3fc943b89448f /compiler-rt | |
| parent | e0fde5c6d0bcaec2a424a03c7141e41b4154585c (diff) | |
| download | bcm5719-llvm-b99d6c8b2acae9cf6d68dcf4c44eb625b530bdd5.tar.gz bcm5719-llvm-b99d6c8b2acae9cf6d68dcf4c44eb625b530bdd5.zip | |
[cfi] Fix shadow sanity check.
The current check may break if the starting address in fill_shadow is
not page-aligned.
llvm-svn: 255725
Diffstat (limited to 'compiler-rt')
| -rw-r--r-- | compiler-rt/lib/cfi/cfi.cc | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/compiler-rt/lib/cfi/cfi.cc b/compiler-rt/lib/cfi/cfi.cc index 27b745853be..3191b568313 100644 --- a/compiler-rt/lib/cfi/cfi.cc +++ b/compiler-rt/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); } } |

