Merge "debuggerd_handler: set PR_SET_PTRACER before running crash_dump."

am: be10cae468

Change-Id: Id3920fc76909b7659034a33542d864fa62b92376
This commit is contained in:
Luis Hector Chavez 2018-01-08 23:37:43 +00:00 committed by android-build-merger
commit 66fa613dbb

View file

@ -500,6 +500,17 @@ static void debuggerd_signal_handler(int signal_number, siginfo_t* info, void* c
fatal_errno("failed to set dumpable");
}
// On kernels with yama_ptrace enabled, also allow any process to attach.
bool restore_orig_ptracer = true;
if (prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY) != 0) {
if (errno == EINVAL) {
// This kernel does not support PR_SET_PTRACER_ANY, or Yama is not enabled.
restore_orig_ptracer = false;
} else {
fatal_errno("failed to set traceable");
}
}
// Essentially pthread_create without CLONE_FILES, so we still work during file descriptor
// exhaustion.
pid_t child_pid =
@ -521,6 +532,11 @@ static void debuggerd_signal_handler(int signal_number, siginfo_t* info, void* c
fatal_errno("failed to restore dumpable");
}
// Restore PR_SET_PTRACER to its original value.
if (restore_orig_ptracer && prctl(PR_SET_PTRACER, 0) != 0) {
fatal_errno("failed to restore traceable");
}
if (info->si_signo == DEBUGGER_SIGNAL) {
// If the signal is fatal, don't unlock the mutex to prevent other crashing threads from
// starting to dump right before our death.