diff options
author | Spencer Jackson <spencer.jackson@mongodb.com> | 2019-02-28 12:15:58 -0500 |
---|---|---|
committer | Spencer Jackson <spencer.jackson@mongodb.com> | 2019-03-06 14:19:58 -0500 |
commit | ce3d54139390383501f58f66389cdf4fafd14d67 (patch) | |
tree | 30c844a96faf7d5f340014850706767cd38cdfa8 | |
parent | 2cc9b94ea266c87f7a71a708a108ce4f2466b76c (diff) | |
download | mongo-ce3d54139390383501f58f66389cdf4fafd14d67.tar.gz |
SERVER-36844 Ensure printStackTrace() produces stacktraces on AUBSAN
-rw-r--r-- | etc/evergreen.yml | 10 | ||||
-rw-r--r-- | src/mongo/util/signal_handlers_synchronous.cpp | 24 | ||||
-rw-r--r-- | src/mongo/util/signal_handlers_synchronous_test.cpp | 2 |
3 files changed, 6 insertions, 30 deletions
diff --git a/etc/evergreen.yml b/etc/evergreen.yml index 739f51fcc5a..3a81f6bc012 100644 --- a/etc/evergreen.yml +++ b/etc/evergreen.yml @@ -13488,7 +13488,7 @@ buildvariants: # We need llvm-symbolizer in the PATH for ASAN for clang-3.7 or later. variant_path_suffix: /opt/mongodbtoolchain/v3/bin lang_environment: LANG=C - san_options: LSAN_OPTIONS="suppressions=etc/lsan.suppressions:report_objects=1" ASAN_OPTIONS=detect_leaks=1:check_initialization_order=true:strict_init_order=true:abort_on_error=1:disable_coredump=0:handle_abort=0:handle_segv=0:handle_sigbus=0:handle_sigill=0:handle_sigfpe=0 + san_options: LSAN_OPTIONS="suppressions=etc/lsan.suppressions:report_objects=1" ASAN_OPTIONS=detect_leaks=1:check_initialization_order=true:strict_init_order=true:abort_on_error=1:disable_coredump=0:handle_abort=1 compile_flags: --variables-files=etc/scons/mongodbtoolchain_v3_clang.vars --dbg=on --opt=on --allocator=system --sanitize=address --ssl --enable-free-mon=on -j$(grep -c ^processor /proc/cpuinfo) --nostrip multiversion_platform: ubuntu1604 multiversion_edition: enterprise @@ -13651,7 +13651,7 @@ buildvariants: # We need llvm-symbolizer in the PATH for ASAN for clang-3.7 or later. variant_path_suffix: /opt/mongodbtoolchain/v3/bin lang_environment: LANG=C - san_options: LSAN_OPTIONS="suppressions=etc/lsan.suppressions:report_objects=1" ASAN_OPTIONS=detect_leaks=1:check_initialization_order=true:strict_init_order=true:abort_on_error=1:disable_coredump=0:handle_abort=0:handle_segv=0:handle_sigbus=0:handle_sigill=0:handle_sigfpe=0 + san_options: LSAN_OPTIONS="suppressions=etc/lsan.suppressions:report_objects=1" ASAN_OPTIONS=detect_leaks=1:check_initialization_order=true:strict_init_order=true:abort_on_error=1:disable_coredump=0:handle_abort=1 compile_flags: --variables-files=etc/scons/mongodbtoolchain_v3_clang.vars --opt=on --allocator=system --sanitize=address --ssl -j$(grep -c ^processor /proc/cpuinfo) --nostrip resmoke_jobs_factor: 0.3 # Avoid starting too many mongod's under ASAN build. tooltags: "ssl" @@ -13696,7 +13696,7 @@ buildvariants: # We need llvm-symbolizer in the PATH for UBSAN. variant_path_suffix: /opt/mongodbtoolchain/v3/bin lang_environment: LANG=C - san_options: UBSAN_OPTIONS="print_stacktrace=1:handle_abort=0:handle_segv=0:handle_sigbus=0:handle_sigill=0:handle_sigfpe=0" + san_options: UBSAN_OPTIONS="print_stacktrace=1" compile_flags: --variables-files=etc/scons/mongodbtoolchain_v3_clang.vars --dbg=on --opt=on --sanitize=undefined --ssl --enable-free-mon=on -j$(grep -c ^processor /proc/cpuinfo) --nostrip multiversion_platform: ubuntu1604 multiversion_edition: enterprise @@ -13848,7 +13848,7 @@ buildvariants: # We need llvm-symbolizer in the PATH for ASAN for clang-3.7 or later. variant_path_suffix: /opt/mongodbtoolchain/v3/bin lang_environment: LANG=C - san_options: UBSAN_OPTIONS="print_stacktrace=1:handle_abort=0:handle_segv=0:handle_sigbus=0:handle_sigill=0:handle_sigfpe=0" LSAN_OPTIONS="suppressions=etc/lsan.suppressions:report_objects=1" ASAN_OPTIONS=detect_leaks=1:check_initialization_order=true:strict_init_order=true:abort_on_error=1:disable_coredump=0:handle_abort=0:handle_segv=0:handle_sigbus=0:handle_sigill=0:handle_sigfpe=0 + san_options: UBSAN_OPTIONS="print_stacktrace=1" LSAN_OPTIONS="suppressions=etc/lsan.suppressions:report_objects=1" ASAN_OPTIONS=detect_leaks=1:check_initialization_order=true:strict_init_order=true:abort_on_error=1:disable_coredump=0:handle_abort=1 compile_flags: --variables-files=etc/scons/mongodbtoolchain_v3_clang.vars --dbg=on --opt=on --allocator=system --sanitize=undefined,address --ssl -j$(grep -c ^processor /proc/cpuinfo) --nostrip resmoke_jobs_factor: 0.3 # Avoid starting too many mongod's under {A,UB}SAN build. tooltags: "ssl" @@ -13881,7 +13881,7 @@ buildvariants: # We need llvm-symbolizer in the PATH for ASAN for clang-3.7 or later. variant_path_suffix: /opt/mongodbtoolchain/v3/bin lang_environment: LANG=C - san_options: UBSAN_OPTIONS="print_stacktrace=1:handle_abort=0:handle_segv=0:handle_sigbus=0:handle_sigill=0:handle_sigfpe=0" LSAN_OPTIONS="suppressions=etc/lsan.suppressions:report_objects=1" ASAN_OPTIONS=detect_leaks=1:check_initialization_order=true:strict_init_order=true:abort_on_error=1:disable_coredump=0:handle_abort=0:handle_segv=0:handle_sigbus=0:handle_sigill=0:handle_sigfpe=0 + san_options: UBSAN_OPTIONS="print_stacktrace=1" LSAN_OPTIONS="suppressions=etc/lsan.suppressions:report_objects=1" ASAN_OPTIONS=detect_leaks=1:check_initialization_order=true:strict_init_order=true:abort_on_error=1:disable_coredump=0:handle_abort=1 compile_flags: --variables-files=etc/scons/mongodbtoolchain_v3_clang.vars --dbg=on --opt=on --allocator=system --sanitize=undefined,address --ssl -j$(grep -c ^processor /proc/cpuinfo) --nostrip resmoke_jobs_factor: 0.3 # Avoid starting too many mongod's under {A,UB}SAN build. tooltags: "ssl" diff --git a/src/mongo/util/signal_handlers_synchronous.cpp b/src/mongo/util/signal_handlers_synchronous.cpp index e503f62cdb9..99b70b03340 100644 --- a/src/mongo/util/signal_handlers_synchronous.cpp +++ b/src/mongo/util/signal_handlers_synchronous.cpp @@ -286,10 +286,6 @@ void abruptQuitWithAddrSignal(int signalNum, siginfo_t* siginfo, void* ucontext_ } // namespace -#if !defined(__has_feature) -#define __has_feature(x) 0 -#endif - void setupSynchronousSignalHandlers() { std::set_terminate(myTerminate); std::set_new_handler(reportOutOfMemoryErrorAndExit); @@ -319,27 +315,7 @@ void setupSynchronousSignalHandlers() { // ^\ is the stronger ^C. Log and quit hard without waiting for cleanup. invariant(sigaction(SIGQUIT, &plainSignals, nullptr) == 0); -#if __has_feature(address_sanitizer) - // Sanitizers may be configured to call abort(). If so, we should omit our signal handler. - bool shouldRegister = true; - constexpr std::array<StringData, 5> sanitizerConfigVariable{"ASAN_OPTIONS"_sd, - "TSAN_OPTIONS"_sd, - "MSAN_OPTIONS"_sd, - "UBSAN_OPTIONS"_sd, - "LSAN_OPTIONS"_sd}; - for (const StringData& option : sanitizerConfigVariable) { - StringData configString(getenv(option.rawData())); - if (configString.find("abort_on_error=1") != std::string::npos || - configString.find("abort_on_error=true") != std::string::npos) { - shouldRegister = false; - } - } - if (shouldRegister) { - invariant(sigaction(SIGABRT, &plainSignals, nullptr) == 0); - } -#else invariant(sigaction(SIGABRT, &plainSignals, nullptr) == 0); -#endif } { struct sigaction addrSignals; diff --git a/src/mongo/util/signal_handlers_synchronous_test.cpp b/src/mongo/util/signal_handlers_synchronous_test.cpp index addd4dd6ae9..7630a8ed2d7 100644 --- a/src/mongo/util/signal_handlers_synchronous_test.cpp +++ b/src/mongo/util/signal_handlers_synchronous_test.cpp @@ -60,6 +60,7 @@ IGNORED_SIGNAL(SIGHUP) IGNORED_SIGNAL(SIGPIPE) FATAL_SIGNAL(SIGQUIT) FATAL_SIGNAL(SIGILL) +FATAL_SIGNAL(SIGABRT) #if not defined(__has_feature) #define __has_feature(X) 0 @@ -67,7 +68,6 @@ FATAL_SIGNAL(SIGILL) #if !__has_feature(address_sanitizer) // These signals trip the leak sanitizer -FATAL_SIGNAL(SIGABRT) FATAL_SIGNAL(SIGSEGV) FATAL_SIGNAL(SIGBUS) FATAL_SIGNAL(SIGFPE) |