Skip to content

Commit 0fb6da8

Browse files
committed
[NFC][hwasan] Create *Report classes (#66682)
This prepare the code for rework to collect all nececcecary data before symbolization. Symbolization as any untrivial computations may affect hwasan metadata.
1 parent cbd4750 commit 0fb6da8

File tree

1 file changed

+74
-6
lines changed

1 file changed

+74
-6
lines changed

compiler-rt/lib/hwasan/hwasan_report.cpp

+74-6
Original file line numberDiff line numberDiff line change
@@ -569,9 +569,20 @@ uptr GetTopPc(StackTrace *stack) {
569569
: 0;
570570
}
571571

572-
void ReportInvalidFree(StackTrace *stack, uptr tagged_addr) {
573-
ScopedReport R(flags()->halt_on_error);
572+
namespace {
573+
class InvalidFreeReport {
574+
public:
575+
InvalidFreeReport(StackTrace *stack, uptr tagged_addr)
576+
: stack(stack), tagged_addr(tagged_addr) {}
577+
~InvalidFreeReport();
574578

579+
private:
580+
StackTrace *stack;
581+
uptr tagged_addr;
582+
};
583+
584+
InvalidFreeReport::~InvalidFreeReport() {
585+
ScopedReport R(flags()->halt_on_error);
575586
uptr untagged_addr = UntagAddr(tagged_addr);
576587
tag_t ptr_tag = GetTagFromPointer(tagged_addr);
577588
tag_t *tag_ptr = nullptr;
@@ -610,9 +621,31 @@ void ReportInvalidFree(StackTrace *stack, uptr tagged_addr) {
610621
MaybePrintAndroidHelpUrl();
611622
ReportErrorSummary(bug_type, stack);
612623
}
624+
} // namespace
613625

614-
void ReportTailOverwritten(StackTrace *stack, uptr tagged_addr, uptr orig_size,
615-
const u8 *expected) {
626+
void ReportInvalidFree(StackTrace *stack, uptr tagged_addr) {
627+
InvalidFreeReport R(stack, tagged_addr);
628+
}
629+
630+
namespace {
631+
class TailOverwrittenReport {
632+
public:
633+
explicit TailOverwrittenReport(StackTrace *stack, uptr tagged_addr,
634+
uptr orig_size, const u8 *expected)
635+
: stack(stack),
636+
tagged_addr(tagged_addr),
637+
orig_size(orig_size),
638+
expected(expected) {}
639+
~TailOverwrittenReport();
640+
641+
private:
642+
StackTrace *stack;
643+
uptr tagged_addr;
644+
uptr orig_size;
645+
const u8 *expected;
646+
};
647+
648+
TailOverwrittenReport::~TailOverwrittenReport() {
616649
uptr tail_size = kShadowAlignment - (orig_size % kShadowAlignment);
617650
u8 actual_expected[kShadowAlignment];
618651
internal_memcpy(actual_expected, expected, tail_size);
@@ -682,9 +715,37 @@ void ReportTailOverwritten(StackTrace *stack, uptr tagged_addr, uptr orig_size,
682715
MaybePrintAndroidHelpUrl();
683716
ReportErrorSummary(bug_type, stack);
684717
}
718+
} // namespace
685719

686-
void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size,
687-
bool is_store, bool fatal, uptr *registers_frame) {
720+
void ReportTailOverwritten(StackTrace *stack, uptr tagged_addr, uptr orig_size,
721+
const u8 *expected) {
722+
TailOverwrittenReport R(stack, tagged_addr, orig_size, expected);
723+
}
724+
725+
namespace {
726+
class TagMismatchReport {
727+
public:
728+
explicit TagMismatchReport(StackTrace *stack, uptr tagged_addr,
729+
uptr access_size, bool is_store, bool fatal,
730+
uptr *registers_frame)
731+
: stack(stack),
732+
tagged_addr(tagged_addr),
733+
access_size(access_size),
734+
is_store(is_store),
735+
fatal(fatal),
736+
registers_frame(registers_frame) {}
737+
~TagMismatchReport();
738+
739+
private:
740+
StackTrace *stack;
741+
uptr tagged_addr;
742+
uptr access_size;
743+
bool is_store;
744+
bool fatal;
745+
uptr *registers_frame;
746+
};
747+
748+
TagMismatchReport::~TagMismatchReport() {
688749
ScopedReport R(fatal);
689750
SavedStackAllocations current_stack_allocations(
690751
GetCurrentThread()->stack_allocations());
@@ -753,6 +814,13 @@ void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size,
753814
MaybePrintAndroidHelpUrl();
754815
ReportErrorSummary(bug_type, stack);
755816
}
817+
} // namespace
818+
819+
void ReportTagMismatch(StackTrace *stack, uptr tagged_addr, uptr access_size,
820+
bool is_store, bool fatal, uptr *registers_frame) {
821+
TagMismatchReport R(stack, tagged_addr, access_size, is_store, fatal,
822+
registers_frame);
823+
}
756824

757825
// See the frame breakdown defined in __hwasan_tag_mismatch (from
758826
// hwasan_tag_mismatch_{aarch64,riscv64}.S).

0 commit comments

Comments
 (0)