]>
Commit | Line | Data |
---|---|---|
1a4d82fc JJ |
1 | //===-- asan_report.h -------------------------------------------*- C++ -*-===// |
2 | // | |
3 | // The LLVM Compiler Infrastructure | |
4 | // | |
5 | // This file is distributed under the University of Illinois Open Source | |
6 | // License. See LICENSE.TXT for details. | |
7 | // | |
8 | //===----------------------------------------------------------------------===// | |
9 | // | |
10 | // This file is a part of AddressSanitizer, an address sanity checker. | |
11 | // | |
12 | // ASan-private header for error reporting functions. | |
13 | //===----------------------------------------------------------------------===// | |
14 | ||
15 | #include "asan_allocator.h" | |
16 | #include "asan_internal.h" | |
17 | #include "asan_thread.h" | |
18 | ||
19 | namespace __asan { | |
20 | ||
92a42be0 SL |
21 | struct StackVarDescr { |
22 | uptr beg; | |
23 | uptr size; | |
24 | const char *name_pos; | |
25 | uptr name_len; | |
26 | }; | |
27 | ||
28 | struct AddressDescription { | |
29 | char *name; | |
30 | uptr name_size; | |
31 | uptr region_address; | |
32 | uptr region_size; | |
33 | const char *region_kind; | |
34 | }; | |
35 | ||
36 | // Returns the number of globals close to the provided address and copies | |
37 | // them to "globals" array. | |
38 | int GetGlobalsForAddress(uptr addr, __asan_global *globals, u32 *reg_sites, | |
39 | int max_globals); | |
40 | bool GetInfoForAddressIfGlobal(uptr addr, AddressDescription *descr); | |
1a4d82fc JJ |
41 | // The following functions prints address description depending |
42 | // on the memory type (shadow/heap/stack/global). | |
43 | void DescribeHeapAddress(uptr addr, uptr access_size); | |
92a42be0 SL |
44 | bool DescribeAddressIfShadow(uptr addr, AddressDescription *descr = nullptr, |
45 | bool print = true); | |
46 | bool ParseFrameDescription(const char *frame_descr, | |
47 | InternalMmapVector<StackVarDescr> *vars); | |
1a4d82fc | 48 | bool DescribeAddressIfStack(uptr addr, uptr access_size); |
1a4d82fc JJ |
49 | void DescribeThread(AsanThreadContext *context); |
50 | ||
51 | // Different kinds of error reports. | |
3157f602 XL |
52 | void ReportGenericError(uptr pc, uptr bp, uptr sp, uptr addr, bool is_write, |
53 | uptr access_size, u32 exp, bool fatal); | |
54 | void ReportStackOverflow(const SignalContext &sig); | |
55 | void ReportDeadlySignal(const char *description, const SignalContext &sig); | |
5bcae85e | 56 | void ReportNewDeleteSizeMismatch(uptr addr, uptr alloc_size, uptr delete_size, |
3157f602 XL |
57 | BufferedStackTrace *free_stack); |
58 | void ReportDoubleFree(uptr addr, BufferedStackTrace *free_stack); | |
59 | void ReportFreeNotMalloced(uptr addr, BufferedStackTrace *free_stack); | |
60 | void ReportAllocTypeMismatch(uptr addr, BufferedStackTrace *free_stack, | |
61 | AllocType alloc_type, | |
62 | AllocType dealloc_type); | |
63 | void ReportMallocUsableSizeNotOwned(uptr addr, BufferedStackTrace *stack); | |
64 | void ReportSanitizerGetAllocatedSizeNotOwned(uptr addr, | |
65 | BufferedStackTrace *stack); | |
66 | void ReportStringFunctionMemoryRangesOverlap(const char *function, | |
67 | const char *offset1, uptr length1, | |
68 | const char *offset2, uptr length2, | |
69 | BufferedStackTrace *stack); | |
70 | void ReportStringFunctionSizeOverflow(uptr offset, uptr size, | |
71 | BufferedStackTrace *stack); | |
72 | void ReportBadParamsToAnnotateContiguousContainer(uptr beg, uptr end, | |
73 | uptr old_mid, uptr new_mid, | |
74 | BufferedStackTrace *stack); | |
1a4d82fc | 75 | |
3157f602 XL |
76 | void ReportODRViolation(const __asan_global *g1, u32 stack_id1, |
77 | const __asan_global *g2, u32 stack_id2); | |
1a4d82fc JJ |
78 | |
79 | // Mac-specific errors and warnings. | |
3157f602 XL |
80 | void ReportMacMzReallocUnknown(uptr addr, uptr zone_ptr, |
81 | const char *zone_name, | |
82 | BufferedStackTrace *stack); | |
83 | void ReportMacCfReallocUnknown(uptr addr, uptr zone_ptr, | |
84 | const char *zone_name, | |
85 | BufferedStackTrace *stack); | |
1a4d82fc JJ |
86 | |
87 | } // namespace __asan |