Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/kern



On Fri, Nov 11, 2016 at 12:10:04 -0500, Christos Zoulas wrote:

> Date:		Fri Nov 11 17:10:04 UTC 2016
> 
> Modified Files:
> 	src/sys/kern: sys_ptrace_common.c
> 
> Log Message:
> kern/51621: When attaching to a child send it a SIGTRAP not a SIGSTOP like
> Linux and FreeBSD do.
> 
> 
> To generate a diff of this commit:
> cvs rdiff -u -r1.2 -r1.3 src/sys/kern/sys_ptrace_common.c

Hmm, I'm confused.  The PR says:

- PT_ATTACH seems to work, but waiting for stopped status and signal from the
  child results in getting SIGTRAP, not SIGSTOP like in Linux and FreeBSD.

This revision changes PT_ATTACH case to:

                proc_changeparent(t, p);
-               signo = SIGSTOP;
+               signo = SIGTRAP;
                goto sendsig;

which looks like it's the opposite of what's said in the PR.

FreeBSD from source code inspection (abridged version quoted below)
does indeed send SIGSTOP:

	case PT_ATTACH:
		proc_set_traced(p, true);
		if (p->p_pptr != td->td_proc) {
			proc_reparent(p, td->td_proc);
		}
		data = SIGSTOP;
		goto sendsig;

From a very quick look through the code it looks like the intention
(before this commit) is to send SIGSTOP to a process that we attach
to, which is semantically correct, as we want to just stop it as-is
and let the tracer poke at it.

The SIGTRAP comes from the fork path as far as I can tell.

So what's going on here?

-uwe


Home | Main Index | Thread Index | Old Index