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