1 //===-- asan_report.h -------------------------------------------*- C++ -*-===//
3 // This file is distributed under the University of Illinois Open Source
4 // License. See LICENSE.TXT for details.
6 //===----------------------------------------------------------------------===//
8 // This file is a part of AddressSanitizer, an address sanity checker.
10 // ASan-private header for error reporting functions.
11 //===----------------------------------------------------------------------===//
16 #include "asan_allocator.h"
17 #include "asan_internal.h"
18 #include "asan_thread.h"
22 struct StackVarDescr
{
30 // Returns the number of globals close to the provided address and copies
31 // them to "globals" array.
32 int GetGlobalsForAddress(uptr addr
, __asan_global
*globals
, u32
*reg_sites
,
35 const char *MaybeDemangleGlobalName(const char *name
);
36 void PrintGlobalNameIfASCII(InternalScopedString
*str
, const __asan_global
&g
);
37 void PrintGlobalLocation(InternalScopedString
*str
, const __asan_global
&g
);
39 void PrintMemoryByte(InternalScopedString
*str
, const char *before
, u8 byte
,
40 bool in_shadow
, const char *after
= "\n");
42 // The following functions prints address description depending
43 // on the memory type (shadow/heap/stack/global).
44 bool ParseFrameDescription(const char *frame_descr
,
45 InternalMmapVector
<StackVarDescr
> *vars
);
47 // Different kinds of error reports.
48 void ReportGenericError(uptr pc
, uptr bp
, uptr sp
, uptr addr
, bool is_write
,
49 uptr access_size
, u32 exp
, bool fatal
);
50 void ReportDeadlySignal(const SignalContext
&sig
);
51 void ReportNewDeleteTypeMismatch(uptr addr
, uptr delete_size
,
52 uptr delete_alignment
,
53 BufferedStackTrace
*free_stack
);
54 void ReportDoubleFree(uptr addr
, BufferedStackTrace
*free_stack
);
55 void ReportFreeNotMalloced(uptr addr
, BufferedStackTrace
*free_stack
);
56 void ReportAllocTypeMismatch(uptr addr
, BufferedStackTrace
*free_stack
,
58 AllocType dealloc_type
);
59 void ReportMallocUsableSizeNotOwned(uptr addr
, BufferedStackTrace
*stack
);
60 void ReportSanitizerGetAllocatedSizeNotOwned(uptr addr
,
61 BufferedStackTrace
*stack
);
62 void ReportCallocOverflow(uptr count
, uptr size
, BufferedStackTrace
*stack
);
63 void ReportPvallocOverflow(uptr size
, BufferedStackTrace
*stack
);
64 void ReportInvalidAllocationAlignment(uptr alignment
,
65 BufferedStackTrace
*stack
);
66 void ReportInvalidAlignedAllocAlignment(uptr size
, uptr alignment
,
67 BufferedStackTrace
*stack
);
68 void ReportInvalidPosixMemalignAlignment(uptr alignment
,
69 BufferedStackTrace
*stack
);
70 void ReportAllocationSizeTooBig(uptr user_size
, uptr total_size
, uptr max_size
,
71 BufferedStackTrace
*stack
);
72 void ReportRssLimitExceeded(BufferedStackTrace
*stack
);
73 void ReportOutOfMemory(uptr requested_size
, BufferedStackTrace
*stack
);
74 void ReportStringFunctionMemoryRangesOverlap(const char *function
,
75 const char *offset1
, uptr length1
,
76 const char *offset2
, uptr length2
,
77 BufferedStackTrace
*stack
);
78 void ReportStringFunctionSizeOverflow(uptr offset
, uptr size
,
79 BufferedStackTrace
*stack
);
80 void ReportBadParamsToAnnotateContiguousContainer(uptr beg
, uptr end
,
81 uptr old_mid
, uptr new_mid
,
82 BufferedStackTrace
*stack
);
84 void ReportODRViolation(const __asan_global
*g1
, u32 stack_id1
,
85 const __asan_global
*g2
, u32 stack_id2
);
87 // Mac-specific errors and warnings.
88 void ReportMacMzReallocUnknown(uptr addr
, uptr zone_ptr
,
89 const char *zone_name
,
90 BufferedStackTrace
*stack
);
91 void ReportMacCfReallocUnknown(uptr addr
, uptr zone_ptr
,
92 const char *zone_name
,
93 BufferedStackTrace
*stack
);
96 #endif // ASAN_REPORT_H