svn commit: r304614 - in stable/11/sys: kern sys
Mark Johnston
markj at FreeBSD.org
Mon Aug 22 17:23:28 UTC 2016
Author: markj
Date: Mon Aug 22 17:23:27 2016
New Revision: 304614
URL: https://svnweb.freebsd.org/changeset/base/304614
Log:
MFC r304440, r304487:
Fix some handling of P2_PTRACE_FSTP.
Modified:
stable/11/sys/kern/kern_fork.c
stable/11/sys/kern/kern_sig.c
stable/11/sys/kern/sys_process.c
stable/11/sys/sys/proc.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/kern/kern_fork.c
==============================================================================
--- stable/11/sys/kern/kern_fork.c Mon Aug 22 17:21:45 2016 (r304613)
+++ stable/11/sys/kern/kern_fork.c Mon Aug 22 17:23:27 2016 (r304614)
@@ -1075,7 +1075,7 @@ fork_return(struct thread *td, struct tr
* parent's children, do it now.
*/
dbg = p->p_pptr->p_pptr;
- proc_set_traced(p);
+ proc_set_traced(p, true);
CTR2(KTR_PTRACE,
"fork_return: attaching to new child pid %d: oppid %d",
p->p_pid, p->p_oppid);
Modified: stable/11/sys/kern/kern_sig.c
==============================================================================
--- stable/11/sys/kern/kern_sig.c Mon Aug 22 17:21:45 2016 (r304613)
+++ stable/11/sys/kern/kern_sig.c Mon Aug 22 17:23:27 2016 (r304614)
@@ -2537,7 +2537,7 @@ ptracestop(struct thread *td, int sig)
* a chance to report itself upon the next iteration.
*/
if ((td->td_dbgflags & TDB_FSTP) != 0 ||
- ((p->p_flag & P2_PTRACE_FSTP) == 0 &&
+ ((p->p_flag2 & P2_PTRACE_FSTP) == 0 &&
p->p_xthread == NULL)) {
p->p_xsig = sig;
p->p_xthread = td;
Modified: stable/11/sys/kern/sys_process.c
==============================================================================
--- stable/11/sys/kern/sys_process.c Mon Aug 22 17:21:45 2016 (r304613)
+++ stable/11/sys/kern/sys_process.c Mon Aug 22 17:23:27 2016 (r304614)
@@ -693,12 +693,13 @@ sys_ptrace(struct thread *td, struct ptr
#endif
void
-proc_set_traced(struct proc *p)
+proc_set_traced(struct proc *p, bool stop)
{
PROC_LOCK_ASSERT(p, MA_OWNED);
p->p_flag |= P_TRACED;
- p->p_flag2 |= P2_PTRACE_FSTP;
+ if (stop)
+ p->p_flag2 |= P2_PTRACE_FSTP;
p->p_ptevents = PTRACE_DEFAULT;
p->p_oppid = p->p_pptr->p_pid;
}
@@ -910,7 +911,7 @@ kern_ptrace(struct thread *td, int req,
switch (req) {
case PT_TRACE_ME:
/* set my trace flag and "owner" so it can read/write me */
- proc_set_traced(p);
+ proc_set_traced(p, false);
if (p->p_flag & P_PPWAIT)
p->p_flag |= P_PPTRACE;
CTR1(KTR_PTRACE, "PT_TRACE_ME: pid %d", p->p_pid);
@@ -927,7 +928,7 @@ kern_ptrace(struct thread *td, int req,
* The old parent is remembered so we can put things back
* on a "detach".
*/
- proc_set_traced(p);
+ proc_set_traced(p, true);
if (p->p_pptr != td->td_proc) {
proc_reparent(p, td->td_proc);
}
Modified: stable/11/sys/sys/proc.h
==============================================================================
--- stable/11/sys/sys/proc.h Mon Aug 22 17:21:45 2016 (r304613)
+++ stable/11/sys/sys/proc.h Mon Aug 22 17:23:27 2016 (r304614)
@@ -1005,7 +1005,7 @@ void proc_linkup(struct proc *p, struct
struct proc *proc_realparent(struct proc *child);
void proc_reap(struct thread *td, struct proc *p, int *status, int options);
void proc_reparent(struct proc *child, struct proc *newparent);
-void proc_set_traced(struct proc *p);
+void proc_set_traced(struct proc *p, bool stop);
struct pstats *pstats_alloc(void);
void pstats_fork(struct pstats *src, struct pstats *dst);
void pstats_free(struct pstats *ps);
More information about the svn-src-stable
mailing list