[compiler-rt] 9094b3b - [NFC][hwasan] Extract BaseReport (#66682)

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 18 17:19:58 PDT 2023


Author: Vitaly Buka
Date: 2023-09-18T17:19:53-07:00
New Revision: 9094b3b4ae81e4778ab0b43a65890d8a5ce8d94e

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

LOG: [NFC][hwasan] Extract BaseReport (#66682)

Added: 
    

Modified: 
    compiler-rt/lib/hwasan/hwasan_report.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/hwasan/hwasan_report.cpp b/compiler-rt/lib/hwasan/hwasan_report.cpp
index 96dfa9a9b54145d..d747f771a9bff80 100644
--- a/compiler-rt/lib/hwasan/hwasan_report.cpp
+++ b/compiler-rt/lib/hwasan/hwasan_report.cpp
@@ -572,21 +572,33 @@ static uptr GetTopPc(StackTrace *stack) {
 }
 
 namespace {
-class InvalidFreeReport {
+class BaseReport {
+ public:
+  BaseReport(StackTrace *stack, bool fatal, uptr tagged_addr)
+      : scoped_report(fatal),
+        stack(stack),
+        tagged_addr(tagged_addr),
+        untagged_addr(UntagAddr(tagged_addr)),
+        ptr_tag(GetTagFromPointer(tagged_addr)) {}
+
+ protected:
+  ScopedReport scoped_report;
+  StackTrace *stack;
+  uptr tagged_addr;
+  uptr untagged_addr;
+  tag_t ptr_tag;
+};
+
+class InvalidFreeReport : public BaseReport {
  public:
   InvalidFreeReport(StackTrace *stack, uptr tagged_addr)
-      : stack(stack), tagged_addr(tagged_addr) {}
+      : BaseReport(stack, flags()->halt_on_error, tagged_addr) {}
   ~InvalidFreeReport();
 
  private:
-  StackTrace *stack;
-  uptr tagged_addr;
 };
 
 InvalidFreeReport::~InvalidFreeReport() {
-  ScopedReport R(flags()->halt_on_error);
-  uptr untagged_addr = UntagAddr(tagged_addr);
-  tag_t ptr_tag = GetTagFromPointer(tagged_addr);
   tag_t *tag_ptr = nullptr;
   tag_t mem_tag = 0;
   if (MemIsApp(untagged_addr)) {
@@ -624,19 +636,16 @@ InvalidFreeReport::~InvalidFreeReport() {
   ReportErrorSummary(bug_type, stack);
 }
 
-class TailOverwrittenReport {
+class TailOverwrittenReport : public BaseReport {
  public:
   explicit TailOverwrittenReport(StackTrace *stack, uptr tagged_addr,
                                  uptr orig_size, const u8 *expected)
-      : stack(stack),
-        tagged_addr(tagged_addr),
+      : BaseReport(stack, flags()->halt_on_error, tagged_addr),
         orig_size(orig_size),
         expected(expected) {}
   ~TailOverwrittenReport();
 
  private:
-  StackTrace *stack;
-  uptr tagged_addr;
   uptr orig_size;
   const u8 *expected;
 };
@@ -645,16 +654,13 @@ TailOverwrittenReport::~TailOverwrittenReport() {
   uptr tail_size = kShadowAlignment - (orig_size % kShadowAlignment);
   u8 actual_expected[kShadowAlignment];
   internal_memcpy(actual_expected, expected, tail_size);
-  tag_t ptr_tag = GetTagFromPointer(tagged_addr);
   // Short granule is stashed in the last byte of the magic string. To avoid
   // confusion, make the expected magic string contain the short granule tag.
   if (orig_size % kShadowAlignment != 0) {
     actual_expected[tail_size - 1] = ptr_tag;
   }
 
-  ScopedReport R(flags()->halt_on_error);
   Decorator d;
-  uptr untagged_addr = UntagAddr(tagged_addr);
   Printf("%s", d.Error());
   const char *bug_type = "allocation-tail-overwritten";
   Report("ERROR: %s: %s; heap object [%p,%p) of size %zd\n", SanitizerToolName,
@@ -712,35 +718,28 @@ TailOverwrittenReport::~TailOverwrittenReport() {
   ReportErrorSummary(bug_type, stack);
 }
 
-class TagMismatchReport {
+class TagMismatchReport : public BaseReport {
  public:
   explicit TagMismatchReport(StackTrace *stack, uptr tagged_addr,
                              uptr access_size, bool is_store, bool fatal,
                              uptr *registers_frame)
-      : stack(stack),
-        tagged_addr(tagged_addr),
+      : BaseReport(stack, fatal, tagged_addr),
         access_size(access_size),
         is_store(is_store),
-        fatal(fatal),
         registers_frame(registers_frame) {}
   ~TagMismatchReport();
 
  private:
-  StackTrace *stack;
-  uptr tagged_addr;
   uptr access_size;
   bool is_store;
-  bool fatal;
   uptr *registers_frame;
 };
 
 TagMismatchReport::~TagMismatchReport() {
-  ScopedReport R(fatal);
   SavedStackAllocations current_stack_allocations(
       GetCurrentThread()->stack_allocations());
 
   Decorator d;
-  uptr untagged_addr = UntagAddr(tagged_addr);
   // TODO: when possible, try to print heap-use-after-free, etc.
   const char *bug_type = "tag-mismatch";
   uptr pc = GetTopPc(stack);
@@ -754,7 +753,6 @@ TagMismatchReport::~TagMismatchReport() {
       __hwasan_test_shadow(reinterpret_cast<void *>(tagged_addr), access_size);
   CHECK_GE(offset, 0);
   CHECK_LT(offset, static_cast<sptr>(access_size));
-  tag_t ptr_tag = GetTagFromPointer(tagged_addr);
   tag_t *tag_ptr =
       reinterpret_cast<tag_t *>(MemToShadow(untagged_addr + offset));
   tag_t mem_tag = *tag_ptr;


        


More information about the llvm-commits mailing list