diff options
author | Josh Gao <jmgao@google.com> | 2018-05-15 17:49:59 -0700 |
---|---|---|
committer | Josh Gao <jmgao@google.com> | 2018-05-16 00:16:09 -0700 |
commit | d2b15dd6749eefaa76a12e0466693e4336e9b8a7 (patch) | |
tree | f8df103d0e3688c78005bb3be3f4beab078dbbcd /debuggerd/handler/debuggerd_fallback.cpp | |
parent | 48cf760bea211b43aa79675c6b73f846202865f9 (diff) |
debuggerd: fix CrasherTest.seccomp_crash_oom.
Switch from _exit to raising SIGABRT when we recurse in the fallback
handler, so that waiters see an abort instead of a regular exit.
Bug: http://b/79717060
Test: debuggerd_test32
Test: debuggerd_test64
Change-Id: Iddee1cb1b759690adf07bbb8cd0fda2faac87571
Diffstat (limited to 'debuggerd/handler/debuggerd_fallback.cpp')
-rw-r--r-- | debuggerd/handler/debuggerd_fallback.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/debuggerd/handler/debuggerd_fallback.cpp b/debuggerd/handler/debuggerd_fallback.cpp index dea2e17eb..079a574d3 100644 --- a/debuggerd/handler/debuggerd_fallback.cpp +++ b/debuggerd/handler/debuggerd_fallback.cpp @@ -304,7 +304,16 @@ static void crash_handler(siginfo_t* info, ucontext_t* ucontext, void* abort_mes crash_mutex.lock(); if (lock_count++ > 0) { - async_safe_format_log(ANDROID_LOG_ERROR, "libc", "recursed signal handler call, exiting"); + async_safe_format_log(ANDROID_LOG_ERROR, "libc", "recursed signal handler call, aborting"); + signal(SIGABRT, SIG_DFL); + raise(SIGABRT); + sigset_t sigset; + sigemptyset(&sigset); + sigaddset(&sigset, SIGABRT); + sigprocmask(SIG_UNBLOCK, &sigset, nullptr); + + // Just in case... + async_safe_format_log(ANDROID_LOG_ERROR, "libc", "abort didn't exit, exiting"); _exit(1); } |