[compiler-rt] bfb5a4f - Revert "[HWASAN] Support short granules in __hwasan_test_shadow"
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 28 17:41:22 PDT 2023
Author: Vitaly Buka
Date: 2023-04-28T17:41:09-07:00
New Revision: bfb5a4fd53fa00d450a0434f20e2193fff196ae6
URL: https://github.com/llvm/llvm-project/commit/bfb5a4fd53fa00d450a0434f20e2193fff196ae6
DIFF: https://github.com/llvm/llvm-project/commit/bfb5a4fd53fa00d450a0434f20e2193fff196ae6.diff
LOG: Revert "[HWASAN] Support short granules in __hwasan_test_shadow"
Break internal tests, but it supposed to be almost NFC.
This reverts commit bf12b746372a25c5a15fa9bd452bd469cc047b47.
Added:
Modified:
compiler-rt/lib/hwasan/hwasan.cpp
compiler-rt/lib/hwasan/hwasan_checks.h
Removed:
compiler-rt/test/hwasan/TestCases/test_shadow.c
################################################################################
diff --git a/compiler-rt/lib/hwasan/hwasan.cpp b/compiler-rt/lib/hwasan/hwasan.cpp
index 26aae9b4869b9..097136fe5480c 100644
--- a/compiler-rt/lib/hwasan/hwasan.cpp
+++ b/compiler-rt/lib/hwasan/hwasan.cpp
@@ -445,32 +445,16 @@ void __hwasan_print_shadow(const void *p, uptr sz) {
sptr __hwasan_test_shadow(const void *p, uptr sz) {
if (sz == 0)
return -1;
- uptr ptr = reinterpret_cast<uptr>(p);
- tag_t ptr_tag = GetTagFromPointer(ptr);
- uptr ptr_raw = UntagAddr(ptr);
+ tag_t ptr_tag = GetTagFromPointer((uptr)p);
+ uptr ptr_raw = UntagAddr(reinterpret_cast<uptr>(p));
uptr shadow_first = MemToShadow(ptr_raw);
- uptr shadow_last = MemToShadow(ptr_raw + sz);
- for (uptr s = shadow_first; s < shadow_last; ++s) {
- if (UNLIKELY(*(tag_t *)s != ptr_tag)) {
- uptr short_size =
- ShortTagSize(*(tag_t *)s, AddTagToPointer(ShadowToMem(s), ptr_tag));
- sptr offset = ShadowToMem(s) - ptr_raw + short_size;
+ uptr shadow_last = MemToShadow(ptr_raw + sz - 1);
+ for (uptr s = shadow_first; s <= shadow_last; ++s)
+ if (*(tag_t *)s != ptr_tag) {
+ sptr offset = ShadowToMem(s) - ptr_raw;
return offset < 0 ? 0 : offset;
}
- }
-
- uptr end = ptr + sz;
- uptr tail_sz = end & (kShadowAlignment - 1);
- if (!tail_sz)
- return -1;
-
- uptr short_size =
- ShortTagSize(*(tag_t *)shadow_last, end & ~(kShadowAlignment - 1));
- if (LIKELY(tail_sz <= short_size))
- return -1;
-
- sptr offset = sz - tail_sz + short_size;
- return offset < 0 ? 0 : offset;
+ return -1;
}
u16 __sanitizer_unaligned_load16(const uu16 *p) {
diff --git a/compiler-rt/lib/hwasan/hwasan_checks.h b/compiler-rt/lib/hwasan/hwasan_checks.h
index 670aa61067ce0..4ffd5246cbd21 100644
--- a/compiler-rt/lib/hwasan/hwasan_checks.h
+++ b/compiler-rt/lib/hwasan/hwasan_checks.h
@@ -125,22 +125,8 @@ __attribute__((always_inline)) static void SigTrap(uptr p, uptr size) {
// __builtin_unreachable();
}
-__attribute__((always_inline, nodebug)) static inline uptr ShortTagSize(
- tag_t mem_tag, uptr ptr) {
- DCHECK(IsAligned(ptr, kShadowAlignment));
- tag_t ptr_tag = GetTagFromPointer(ptr);
- if (ptr_tag == mem_tag)
- return kShadowAlignment;
- if (mem_tag >= kShadowAlignment)
- return 0;
- if (*(u8 *)(ptr | (kShadowAlignment - 1)) != ptr_tag)
- return 0;
- return mem_tag;
-}
-
__attribute__((always_inline, nodebug)) static inline bool
PossiblyShortTagMatches(tag_t mem_tag, uptr ptr, uptr sz) {
- DCHECK(IsAligned(ptr, kShadowAlignment));
tag_t ptr_tag = GetTagFromPointer(ptr);
if (ptr_tag == mem_tag)
return true;
diff --git a/compiler-rt/test/hwasan/TestCases/test_shadow.c b/compiler-rt/test/hwasan/TestCases/test_shadow.c
deleted file mode 100644
index 693ba255a030e..0000000000000
--- a/compiler-rt/test/hwasan/TestCases/test_shadow.c
+++ /dev/null
@@ -1,41 +0,0 @@
-// RUN: %clang_hwasan %s -o %t && %run %t
-
-#include <assert.h>
-#include <sanitizer/hwasan_interface.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-int main() {
- __hwasan_enable_allocator_tagging();
- for (int sz = 0; sz < 64; ++sz) {
- fprintf(stderr, "sz: %d\n", sz);
- char *x = (char *)malloc(sz);
- do {
- // Empty range is always OK.
- for (int b = -16; b < sz + 32; ++b)
- assert(__hwasan_test_shadow(x + b, 0) == -1);
-
- int real_sz = sz ? sz : 1;
- // Unlucky case when we cant distinguish between tag and short granule size.
- if (__hwasan_tag_pointer(x, real_sz % 16) == x)
- break;
-
- // Underflow - the first byte is bad.
- for (int b = -16; b < 0; ++b)
- assert(__hwasan_test_shadow(x + b, real_sz) == 0);
-
- // Inbound ranges.
- for (int b = 0; b < real_sz; ++b)
- for (int e = b; e <= real_sz; ++e)
- assert(__hwasan_test_shadow(x + b, e - b) == -1);
-
- // Overflow - the first byte after the buffer is bad.
- for (int b = 0; b <= real_sz; ++b)
- for (int e = real_sz + 1; e <= real_sz + 64; ++e)
- assert(__hwasan_test_shadow(x + b, e - b) == (real_sz - b));
-
- } while (0);
- free(x);
- }
- return 0;
-}
More information about the llvm-commits
mailing list