Merge "debuggerd_handler: set PR_SET_PTRACER before running crash_dump."
This commit is contained in:
commit
be10cae468
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue