diff options
author | Filipe Cabecinhas <me@filcab.net> | 2016-09-14 07:37:14 +0000 |
---|---|---|
committer | Filipe Cabecinhas <me@filcab.net> | 2016-09-14 07:37:14 +0000 |
commit | 3f34cc74c2cf3fd5579cb2b8ddd7af5af82889ca (patch) | |
tree | 905546d59f5ca41bdc5dda2117e3e99acf5d7c9a /lib/asan/asan_errors.h | |
parent | 73b166fd882b0e5b535f203c747da708445b93f7 (diff) |
[asan] Reify ErrorStringFunctionMemoryRangesOverlap
Summary: Continuing implementation mentioned in this thread: http://lists.llvm.org/pipermail/llvm-dev/2016-July/101933.html
Reviewers: kcc, eugenis, vitalybuka
Subscribers: kubabrecka, llvm-commits
Differential Revision: https://reviews.llvm.org/D24393
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@281443 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/asan/asan_errors.h')
-rw-r--r-- | lib/asan/asan_errors.h | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/lib/asan/asan_errors.h b/lib/asan/asan_errors.h index cac0cf82d..334a2514d 100644 --- a/lib/asan/asan_errors.h +++ b/lib/asan/asan_errors.h @@ -193,16 +193,45 @@ struct ErrorSanitizerGetAllocatedSizeNotOwned : ErrorBase { void Print(); }; +struct ErrorStringFunctionMemoryRangesOverlap : ErrorBase { + // ErrorStringFunctionMemoryRangesOverlap doesn't own the stack trace. + const BufferedStackTrace *stack; + uptr length1, length2; + AddressDescription addr1_description; + AddressDescription addr2_description; + const char *function; + // VS2013 doesn't implement unrestricted unions, so we need a trivial default + // constructor + ErrorStringFunctionMemoryRangesOverlap() = default; + ErrorStringFunctionMemoryRangesOverlap(u32 tid, BufferedStackTrace *stack_, + uptr addr1, uptr length1_, uptr addr2, + uptr length2_, const char *function_) + : ErrorBase(tid), + stack(stack_), + length1(length1_), + length2(length2_), + addr1_description(addr1, length1, /*shouldLockThreadRegistry=*/false), + addr2_description(addr2, length2, /*shouldLockThreadRegistry=*/false), + function(function_) { + char bug_type[100]; + internal_snprintf(bug_type, sizeof(bug_type), "%s-param-overlap", function); + scariness.Clear(); + scariness.Scare(10, bug_type); + } + void Print(); +}; + // clang-format off -#define ASAN_FOR_EACH_ERROR_KIND(macro) \ - macro(StackOverflow) \ - macro(DeadlySignal) \ - macro(DoubleFree) \ - macro(NewDeleteSizeMismatch) \ - macro(FreeNotMalloced) \ - macro(AllocTypeMismatch) \ - macro(MallocUsableSizeNotOwned) \ - macro(SanitizerGetAllocatedSizeNotOwned) +#define ASAN_FOR_EACH_ERROR_KIND(macro) \ + macro(StackOverflow) \ + macro(DeadlySignal) \ + macro(DoubleFree) \ + macro(NewDeleteSizeMismatch) \ + macro(FreeNotMalloced) \ + macro(AllocTypeMismatch) \ + macro(MallocUsableSizeNotOwned) \ + macro(SanitizerGetAllocatedSizeNotOwned) \ + macro(StringFunctionMemoryRangesOverlap) // clang-format on #define ASAN_DEFINE_ERROR_KIND(name) kErrorKind##name, |