diff options
Diffstat (limited to 'third_party/libwebrtc/build/sanitizers')
5 files changed, 452 insertions, 0 deletions
diff --git a/third_party/libwebrtc/build/sanitizers/OWNERS b/third_party/libwebrtc/build/sanitizers/OWNERS new file mode 100644 index 0000000000..b893bc80e9 --- /dev/null +++ b/third_party/libwebrtc/build/sanitizers/OWNERS @@ -0,0 +1,8 @@ +ochang@chromium.org +eugenis@chromium.org +glider@chromium.org +inferno@chromium.org +metzman@chromium.org +rnk@chromium.org +per-file tsan_suppressions.cc=* +per-file lsan_suppressions.cc=* diff --git a/third_party/libwebrtc/build/sanitizers/asan_suppressions.cc b/third_party/libwebrtc/build/sanitizers/asan_suppressions.cc new file mode 100644 index 0000000000..f3b9459ded --- /dev/null +++ b/third_party/libwebrtc/build/sanitizers/asan_suppressions.cc @@ -0,0 +1,23 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file contains the default suppressions for AddressSanitizer. +// It should only be used under very limited circumstances such as suppressing +// a report caused by an interceptor call in a system-installed library. + +#if defined(ADDRESS_SANITIZER) + +// Please make sure the code below declares a single string variable +// kASanDefaultSuppressions which contains ASan suppressions delimited by +// newlines. Entries should look, for example, like: +// +// // http://crbug.com/178677 +// "interceptor_via_lib:libsqlite3.so\n" +char kASanDefaultSuppressions[] = + + // End of suppressions. + // PLEASE READ ABOVE BEFORE ADDING NEW SUPPRESSIONS. + ""; // Please keep this semicolon. + +#endif // ADDRESS_SANITIZER diff --git a/third_party/libwebrtc/build/sanitizers/lsan_suppressions.cc b/third_party/libwebrtc/build/sanitizers/lsan_suppressions.cc new file mode 100644 index 0000000000..8b35550061 --- /dev/null +++ b/third_party/libwebrtc/build/sanitizers/lsan_suppressions.cc @@ -0,0 +1,78 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file contains the default suppressions for LeakSanitizer. +// You can also pass additional suppressions via LSAN_OPTIONS: +// LSAN_OPTIONS=suppressions=/path/to/suppressions. Please refer to +// http://dev.chromium.org/developers/testing/leaksanitizer for more info. + +#if defined(LEAK_SANITIZER) + +// Please make sure the code below declares a single string variable +// kLSanDefaultSuppressions which contains LSan suppressions delimited by +// newlines. See http://dev.chromium.org/developers/testing/leaksanitizer +// for the instructions on writing suppressions. +char kLSanDefaultSuppressions[] = + // Intentional leak used as sanity test for Valgrind/memcheck. + "leak:base::ToolsSanityTest_MemoryLeak_Test::TestBody\n" + + // ================ Leaks in third-party code ================ + + // False positives in libfontconfig. http://crbug.com/39050 + "leak:libfontconfig\n" + // eglibc-2.19/string/strdup.c creates false positive leak errors because of + // the same reason as crbug.com/39050. The leak error stack trace, when + // unwind on malloc, includes a call to libfontconfig. But the default stack + // trace is too short in leak sanitizer bot to make the libfontconfig + // suppression works. http://crbug.com/605286 + "leak:__strdup\n" + + // Leaks in Nvidia's libGL. + "leak:libGL.so\n" + "leak:libGLX_nvidia.so\n" + "leak:libnvidia-glcore.so\n" + + // XRandR has several one time leaks. + "leak:libxrandr\n" + + // xrandr leak. http://crbug.com/119677 + "leak:XRRFindDisplay\n" + + // http://crbug.com/431213, http://crbug.com/416665 + "leak:gin/object_template_builder.h\n" + "leak:gin/function_template.h\n" + + // Leaks in swrast_dri.so. http://crbug.com/540042 + "leak:swrast_dri.so\n" + + // Leak in glibc's gconv caused by fopen(..., "r,ccs=UNICODE") + "leak:__gconv_lookup_cache\n" + + // ================ Leaks in Chromium code ================ + // PLEASE DO NOT ADD SUPPRESSIONS FOR NEW LEAKS. + // Instead, commits that introduce memory leaks should be reverted. + // Suppressing the leak is acceptable in some cases when reverting is + // impossible, i.e. when enabling leak detection for the first time for a + // test target with pre-existing leaks. + + // https://crbug.com/755670 + "leak:third_party/yasm/\n" + + // v8 leaks caused by weak ref not call + "leak:blink::DOMWrapperWorld::Create\n" + "leak:blink::ScriptState::Create\n" + + // Crash keys are intentionally leaked. + "leak:crash_reporter::(anonymous " + "namespace)::CrashKeyBaseSupport::Allocate\n" + + // Suppress leaks in CreateCdmInstance. https://crbug.com/961062 + "leak:media::CdmAdapter::CreateCdmInstance\n" + + // PLEASE READ ABOVE BEFORE ADDING NEW SUPPRESSIONS. + + // End of suppressions. + ; // Please keep this semicolon. + +#endif // LEAK_SANITIZER diff --git a/third_party/libwebrtc/build/sanitizers/sanitizer_options.cc b/third_party/libwebrtc/build/sanitizers/sanitizer_options.cc new file mode 100644 index 0000000000..d3ab861773 --- /dev/null +++ b/third_party/libwebrtc/build/sanitizers/sanitizer_options.cc @@ -0,0 +1,205 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. +// +// This file contains the default options for various compiler-based dynamic +// tools. + +#include "build/build_config.h" + +#if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) || \ + defined(MEMORY_SANITIZER) || defined(THREAD_SANITIZER) || \ + defined(UNDEFINED_SANITIZER) +// Functions returning default options are declared weak in the tools' runtime +// libraries. To make the linker pick the strong replacements for those +// functions from this module, we explicitly force its inclusion by passing +// -Wl,-u_sanitizer_options_link_helper +extern "C" +void _sanitizer_options_link_helper() { } + +// The callbacks we define here will be called from the sanitizer runtime, but +// aren't referenced from the Chrome executable. We must ensure that those +// callbacks are not sanitizer-instrumented, and that they aren't stripped by +// the linker. +#define SANITIZER_HOOK_ATTRIBUTE \ + extern "C" \ + __attribute__((no_sanitize("address", "memory", "thread", "undefined"))) \ + __attribute__((visibility("default"))) \ + __attribute__((used)) +#endif + +#if defined(ADDRESS_SANITIZER) +// Default options for AddressSanitizer in various configurations: +// check_printf=1 - check the memory accesses to printf (and other formatted +// output routines) arguments. +// use_sigaltstack=1 - handle signals on an alternate signal stack. Useful +// for stack overflow detection. +// strip_path_prefix=/../../ - prefixes up to and including this +// substring will be stripped from source file paths in symbolized reports +// fast_unwind_on_fatal=1 - use the fast (frame-pointer-based) stack unwinder +// to print error reports. V8 doesn't generate debug info for the JIT code, +// so the slow unwinder may not work properly. +// detect_stack_use_after_return=1 - use fake stack to delay the reuse of +// stack allocations and detect stack-use-after-return errors. +// symbolize=1 - enable in-process symbolization. +// external_symbolizer_path=... - provides the path to llvm-symbolizer +// relative to the main executable +#if defined(OS_LINUX) || defined(OS_CHROMEOS) +const char kAsanDefaultOptions[] = + "check_printf=1 use_sigaltstack=1 strip_path_prefix=/../../ " + "fast_unwind_on_fatal=1 detect_stack_use_after_return=1 " + "symbolize=1 detect_leaks=0 allow_user_segv_handler=1 " + "external_symbolizer_path=%d/../../third_party/llvm-build/Release+Asserts/" + "bin/llvm-symbolizer"; + +#elif defined(OS_APPLE) +const char* kAsanDefaultOptions = + "check_printf=1 use_sigaltstack=1 strip_path_prefix=/../../ " + "fast_unwind_on_fatal=1 detect_stack_use_after_return=1 "; + +#elif defined(OS_WIN) +const char* kAsanDefaultOptions = + "check_printf=1 use_sigaltstack=1 strip_path_prefix=\\..\\..\\ " + "fast_unwind_on_fatal=1 detect_stack_use_after_return=1 " + "symbolize=1 external_symbolizer_path=%d/../../third_party/" + "llvm-build/Release+Asserts/bin/llvm-symbolizer.exe"; +#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) + +#if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_APPLE) || \ + defined(OS_WIN) +// Allow NaCl to override the default asan options. +extern const char* kAsanDefaultOptionsNaCl; +__attribute__((weak)) const char* kAsanDefaultOptionsNaCl = nullptr; + +SANITIZER_HOOK_ATTRIBUTE const char *__asan_default_options() { + if (kAsanDefaultOptionsNaCl) + return kAsanDefaultOptionsNaCl; + return kAsanDefaultOptions; +} + +extern char kASanDefaultSuppressions[]; + +SANITIZER_HOOK_ATTRIBUTE const char *__asan_default_suppressions() { + return kASanDefaultSuppressions; +} +#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_APPLE) || + // defined(OS_WIN) +#endif // ADDRESS_SANITIZER + +#if defined(THREAD_SANITIZER) && (defined(OS_LINUX) || defined(OS_CHROMEOS)) +// Default options for ThreadSanitizer in various configurations: +// detect_deadlocks=1 - enable deadlock (lock inversion) detection. +// second_deadlock_stack=1 - more verbose deadlock reports. +// report_signal_unsafe=0 - do not report async-signal-unsafe functions +// called from signal handlers. +// report_thread_leaks=0 - do not report unjoined threads at the end of +// the program execution. +// print_suppressions=1 - print the list of matched suppressions. +// history_size=7 - make the history buffer proportional to 2^7 (the maximum +// value) to keep more stack traces. +// strip_path_prefix=/../../ - prefixes up to and including this +// substring will be stripped from source file paths in symbolized reports. +// external_symbolizer_path=... - provides the path to llvm-symbolizer +// relative to the main executable +const char kTsanDefaultOptions[] = + "detect_deadlocks=1 second_deadlock_stack=1 report_signal_unsafe=0 " + "report_thread_leaks=0 print_suppressions=1 history_size=7 " + "strip_path_prefix=/../../ external_symbolizer_path=%d/../../third_party/" + "llvm-build/Release+Asserts/bin/llvm-symbolizer"; + +SANITIZER_HOOK_ATTRIBUTE const char *__tsan_default_options() { + return kTsanDefaultOptions; +} + +extern char kTSanDefaultSuppressions[]; + +SANITIZER_HOOK_ATTRIBUTE const char *__tsan_default_suppressions() { + return kTSanDefaultSuppressions; +} + +#endif // defined(THREAD_SANITIZER) && (defined(OS_LINUX) || + // defined(OS_CHROMEOS)) + +#if defined(MEMORY_SANITIZER) +// Default options for MemorySanitizer: +// strip_path_prefix=/../../ - prefixes up to and including this +// substring will be stripped from source file paths in symbolized reports. +// external_symbolizer_path=... - provides the path to llvm-symbolizer +// relative to the main executable +const char kMsanDefaultOptions[] = + "strip_path_prefix=/../../ " + +#if !defined(OS_APPLE) + "external_symbolizer_path=%d/../../third_party/llvm-build/Release+Asserts/" + "bin/llvm-symbolizer" +#endif +; + +SANITIZER_HOOK_ATTRIBUTE const char *__msan_default_options() { + return kMsanDefaultOptions; +} + +#endif // MEMORY_SANITIZER + +#if defined(LEAK_SANITIZER) +// Default options for LeakSanitizer: +// print_suppressions=1 - print the list of matched suppressions. +// strip_path_prefix=/../../ - prefixes up to and including this +// substring will be stripped from source file paths in symbolized reports. +// external_symbolizer_path=... - provides the path to llvm-symbolizer +// relative to the main executable +// use_poisoned=1 - Scan poisoned memory. This is useful for Oilpan (C++ +// garbage collection) which wants to exclude its managed memory from being +// reported as leaks (through root regions) and also temporarily poisons +// memory regions before calling destructors of objects to avoid destructors +// cross-referencing memory in other objects. Main thread termination in +// Blink is not graceful and leak checks may be emitted at any time, which +// means that the garbage collector may be in a state with poisoned memory, +// leading to false-positive reports. +const char kLsanDefaultOptions[] = + "print_suppressions=1 strip_path_prefix=/../../ " + "use_poisoned=1 " + +#if !defined(OS_APPLE) + "external_symbolizer_path=%d/../../third_party/llvm-build/Release+Asserts/" + "bin/llvm-symbolizer " +#endif + +#if defined(ARCH_CPU_64_BITS) + // When pointer compression in V8 is enabled the external pointers in the + // heap are guaranteed to be only 4 bytes aligned. So we need this option + // in order to ensure that LSAN will find all the external pointers. + // TODO(crbug.com/328552): see updates from 2019. + "use_unaligned=1 " +#endif // ARCH_CPU_64_BITS + ; + +SANITIZER_HOOK_ATTRIBUTE const char *__lsan_default_options() { + return kLsanDefaultOptions; +} + +extern char kLSanDefaultSuppressions[]; + +SANITIZER_HOOK_ATTRIBUTE const char *__lsan_default_suppressions() { + return kLSanDefaultSuppressions; +} + +#endif // LEAK_SANITIZER + +#if defined(UNDEFINED_SANITIZER) +// Default options for UndefinedBehaviorSanitizer: +// print_stacktrace=1 - print the stacktrace when UBSan reports an error. +const char kUbsanDefaultOptions[] = + "print_stacktrace=1 strip_path_prefix=/../../ " + +#if !defined(OS_APPLE) + "external_symbolizer_path=%d/../../third_party/llvm-build/Release+Asserts/" + "bin/llvm-symbolizer" +#endif + ; + +SANITIZER_HOOK_ATTRIBUTE const char* __ubsan_default_options() { + return kUbsanDefaultOptions; +} + +#endif // UNDEFINED_SANITIZER diff --git a/third_party/libwebrtc/build/sanitizers/tsan_suppressions.cc b/third_party/libwebrtc/build/sanitizers/tsan_suppressions.cc new file mode 100644 index 0000000000..06d32f3cfc --- /dev/null +++ b/third_party/libwebrtc/build/sanitizers/tsan_suppressions.cc @@ -0,0 +1,138 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This file contains the default suppressions for ThreadSanitizer. +// You can also pass additional suppressions via TSAN_OPTIONS: +// TSAN_OPTIONS=suppressions=/path/to/suppressions. Please refer to +// http://dev.chromium.org/developers/testing/threadsanitizer-tsan-v2 +// for more info. + +#if defined(THREAD_SANITIZER) + +// Please make sure the code below declares a single string variable +// kTSanDefaultSuppressions contains TSan suppressions delimited by newlines. +// See http://dev.chromium.org/developers/testing/threadsanitizer-tsan-v2 +// for the instructions on writing suppressions. +char kTSanDefaultSuppressions[] = + // False positives in libdbus.so, libdconfsettings.so, libflashplayer.so, + // libgio.so, libglib.so and libgobject.so. + // Since we don't instrument them, we cannot reason about the + // synchronization in them. + "race:libdbus*.so\n" + "race:libdconfsettings*.so\n" + "race:libflashplayer.so\n" + "race:libgio*.so\n" + "race:libglib*.so\n" + "race:libgobject*.so\n" + + // Intentional race in ToolsSanityTest.DataRace in base_unittests. + "race:base/tools_sanity_unittest.cc\n" + + // Data race on WatchdogCounter [test-only]. + "race:base/threading/watchdog_unittest.cc\n" + + // Data race caused by swapping out the network change notifier with a mock + // [test-only]. http://crbug.com/927330. + "race:content/browser/net_info_browsertest.cc\n" + + // http://crbug.com/120808 + "race:base/threading/watchdog.cc\n" + + // http://crbug.com/157586 + "race:third_party/libvpx/source/libvpx/vp8/decoder/threading.c\n" + + // http://crbug.com/244856 + "race:libpulsecommon*.so\n" + + // http://crbug.com/258479 + "race:g_trace_state\n" + + // http://crbug.com/268924 + "race:base::g_power_monitor\n" + "race:base::PowerMonitor::PowerMonitor\n" + "race:base::PowerMonitor::AddObserver\n" + "race:base::PowerMonitor::RemoveObserver\n" + "race:base::PowerMonitor::IsOnBatteryPower\n" + + // http://crbug.com/272095 + "race:base::g_top_manager\n" + + // http://crbug.com/308590 + "race:CustomThreadWatcher::~CustomThreadWatcher\n" + + // http://crbug.com/476529 + "deadlock:cc::VideoLayerImpl::WillDraw\n" + + // http://crbug.com/328826 + "race:skia::(anonymous namespace)::g_pixel_geometry\n" + + // http://crbug.com/328868 + "race:PR_Lock\n" + + // http://crbug.com/348984 + "race:sctp_express_handle_sack\n" + "race:system_base_info\n" + + // False positive in libc's tzset_internal, http://crbug.com/379738. + "race:tzset_internal\n" + + // http://crbug.com/380554 + "deadlock:g_type_add_interface_static\n" + + // http:://crbug.com/386385 + "race:content::AppCacheStorageImpl::DatabaseTask::CallRunCompleted\n" + + // http://crbug.com/397022 + "deadlock:" + "base::trace_event::TraceEventTestFixture_ThreadOnceBlocking_Test::" + "TestBody\n" + + // http://crbug.com/415472 + "deadlock:base::trace_event::TraceLog::GetCategoryGroupEnabled\n" + + // Lock inversion in third party code, won't fix. + // https://crbug.com/455638 + "deadlock:dbus::Bus::ShutdownAndBlock\n" + + // https://crbug.com/459429 + "race:randomnessPid\n" + + // http://crbug.com/582274 + "race:usrsctp_close\n" + + // http://crbug.com/633145 + "race:third_party/libjpeg_turbo/simd/jsimd_x86_64.c\n" + + // http://crbug.com/691029 + "deadlock:libGLX.so*\n" + + // http://crbug.com/973947 + "deadlock:libnvidia-glsi.so*\n" + + // http://crbug.com/695929 + "race:base::i18n::IsRTL\n" + "race:base::i18n::SetICUDefaultLocale\n" + + // https://crbug.com/794920 + "race:base::debug::SetCrashKeyString\n" + "race:crash_reporter::internal::CrashKeyStringImpl::Set\n" + + // http://crbug.com/927330 + "race:net::(anonymous namespace)::g_network_change_notifier\n" + + // https://crbug.com/977085 + "race:vp3_update_thread_context\n" + + // Benign data race in libjpeg-turbo, won't fix + // (https://github.com/libjpeg-turbo/libjpeg-turbo/issues/87). + // https://crbug.com/1056011 + "race:third_party/libjpeg_turbo/simd/x86_64/jsimd.c\n" + + // https://crbug.com/1158622 + "race:absl::synchronization_internal::Waiter::Post\n" + + // End of suppressions. + ; // Please keep this semicolon. + +#endif // THREAD_SANITIZER |