Fix handling of unexpected tracees when PTRACE_SEIZE is not in use
* strace.c (maybe_allocate_tcb) <WIFSTOPPED(status) && !followfork>: The expected ptrace stop signal in case of !use seize is not syscall_trap_sig but SIGSTOP. An idea of using PTRACE_GETSIGINFO to distinguish signal stops that should be re-injected from other kinds of stops didn't work out due to kernel implementation peculiarities of initial ptrace-stop.
This commit is contained in:
parent
10360644ca
commit
7a35b711df
11
strace.c
11
strace.c
@ -2095,10 +2095,15 @@ maybe_allocate_tcb(const int pid, int status)
|
||||
* This can happen if a clone call misused CLONE_PTRACE itself.
|
||||
*/
|
||||
unsigned int sig = WSTOPSIG(status);
|
||||
unsigned int event = (unsigned int) status >> 16;
|
||||
|
||||
if (event == PTRACE_EVENT_STOP || sig == syscall_trap_sig)
|
||||
sig = 0;
|
||||
if (use_seize) {
|
||||
unsigned int event = (unsigned int) status >> 16;
|
||||
if (event == PTRACE_EVENT_STOP)
|
||||
sig = 0;
|
||||
} else {
|
||||
if (sig == SIGSTOP)
|
||||
sig = 0;
|
||||
}
|
||||
|
||||
ptrace(PTRACE_DETACH, pid, NULL, (unsigned long) sig);
|
||||
error_msg("Detached unknown pid %d%s%s", pid,
|
||||
|
Loading…
x
Reference in New Issue
Block a user