Author: markj
Date: Mon Aug 22 17:21:45 2016
New Revision: 304613
URL: https://svnweb.freebsd.org/changeset/base/304613

Log:
  MFC r304440, r304487:
  Fix some handling of P2_PTRACE_FSTP.

Modified:
  stable/10/sys/kern/kern_fork.c
  stable/10/sys/kern/kern_sig.c
  stable/10/sys/kern/sys_process.c
  stable/10/sys/sys/proc.h
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/kern/kern_fork.c
==============================================================================
--- stable/10/sys/kern/kern_fork.c      Mon Aug 22 16:39:51 2016        
(r304612)
+++ stable/10/sys/kern/kern_fork.c      Mon Aug 22 17:21:45 2016        
(r304613)
@@ -1064,7 +1064,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/10/sys/kern/kern_sig.c
==============================================================================
--- stable/10/sys/kern/kern_sig.c       Mon Aug 22 16:39:51 2016        
(r304612)
+++ stable/10/sys/kern/kern_sig.c       Mon Aug 22 17:21:45 2016        
(r304613)
@@ -2510,7 +2510,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_xstat = sig;
                        p->p_xthread = td;

Modified: stable/10/sys/kern/sys_process.c
==============================================================================
--- stable/10/sys/kern/sys_process.c    Mon Aug 22 16:39:51 2016        
(r304612)
+++ stable/10/sys/kern/sys_process.c    Mon Aug 22 17:21:45 2016        
(r304613)
@@ -649,12 +649,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;
 }
@@ -867,7 +868,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);
@@ -884,7 +885,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/10/sys/sys/proc.h
==============================================================================
--- stable/10/sys/sys/proc.h    Mon Aug 22 16:39:51 2016        (r304612)
+++ stable/10/sys/sys/proc.h    Mon Aug 22 17:21:45 2016        (r304613)
@@ -933,7 +933,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);
_______________________________________________
svn-src-stable-10@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-stable-10
To unsubscribe, send any mail to "svn-src-stable-10-unsubscr...@freebsd.org"

Reply via email to