summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSpencer Jackson <spencer.jackson@mongodb.com>2019-02-28 12:15:58 -0500
committerSpencer Jackson <spencer.jackson@mongodb.com>2019-03-06 14:19:58 -0500
commitce3d54139390383501f58f66389cdf4fafd14d67 (patch)
tree30c844a96faf7d5f340014850706767cd38cdfa8
parent2cc9b94ea266c87f7a71a708a108ce4f2466b76c (diff)
downloadmongo-ce3d54139390383501f58f66389cdf4fafd14d67.tar.gz
SERVER-36844 Ensure printStackTrace() produces stacktraces on AUBSAN
-rw-r--r--etc/evergreen.yml10
-rw-r--r--src/mongo/util/signal_handlers_synchronous.cpp24
-rw-r--r--src/mongo/util/signal_handlers_synchronous_test.cpp2
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)