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