1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker // 5*6777b538SAndroid Build Coastguard Worker // Defines some functions that intentionally do an invalid memory access in 6*6777b538SAndroid Build Coastguard Worker // order to trigger an AddressSanitizer (ASan) error report. 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #ifndef BASE_DEBUG_ASAN_INVALID_ACCESS_H_ 9*6777b538SAndroid Build Coastguard Worker #define BASE_DEBUG_ASAN_INVALID_ACCESS_H_ 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/compiler_specific.h" 13*6777b538SAndroid Build Coastguard Worker #include "base/sanitizer_buildflags.h" 14*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h" 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker namespace base { 17*6777b538SAndroid Build Coastguard Worker namespace debug { 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker #if defined(ADDRESS_SANITIZER) || BUILDFLAG(IS_HWASAN) 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker // Generates an heap buffer overflow. 22*6777b538SAndroid Build Coastguard Worker NOINLINE BASE_EXPORT void AsanHeapOverflow(); 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker // Generates an heap buffer underflow. 25*6777b538SAndroid Build Coastguard Worker NOINLINE BASE_EXPORT void AsanHeapUnderflow(); 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker // Generates an use after free. 28*6777b538SAndroid Build Coastguard Worker NOINLINE BASE_EXPORT void AsanHeapUseAfterFree(); 29*6777b538SAndroid Build Coastguard Worker 30*6777b538SAndroid Build Coastguard Worker // The "corrupt-block" and "corrupt-heap" classes of bugs is specific to 31*6777b538SAndroid Build Coastguard Worker // Windows. 32*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN) 33*6777b538SAndroid Build Coastguard Worker // Corrupts a memory block and makes sure that the corruption gets detected when 34*6777b538SAndroid Build Coastguard Worker // we try to free this block. 35*6777b538SAndroid Build Coastguard Worker NOINLINE BASE_EXPORT void AsanCorruptHeapBlock(); 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker // Corrupts the heap and makes sure that the corruption gets detected when a 38*6777b538SAndroid Build Coastguard Worker // crash occur. 39*6777b538SAndroid Build Coastguard Worker NOINLINE BASE_EXPORT void AsanCorruptHeap(); 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker #endif // BUILDFLAG(IS_WIN) 42*6777b538SAndroid Build Coastguard Worker #endif // ADDRESS_SANITIZER 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker } // namespace debug 45*6777b538SAndroid Build Coastguard Worker } // namespace base 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker #endif // BASE_DEBUG_ASAN_INVALID_ACCESS_H_ 48