summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_process.c
diff options
context:
space:
mode:
authormarkj <markj@FreeBSD.org>2016-08-22 17:23:27 +0000
committermarkj <markj@FreeBSD.org>2016-08-22 17:23:27 +0000
commit55525d64d63bd8233dc487b5e2999236a2c71ee9 (patch)
tree38ead7c50209375fb526aed550d513b5d3f66b1c /sys/kern/sys_process.c
parentcdf85d32a58159745afdcc1de99a47f3521c6f13 (diff)
downloadFreeBSD-src-55525d64d63bd8233dc487b5e2999236a2c71ee9.zip
FreeBSD-src-55525d64d63bd8233dc487b5e2999236a2c71ee9.tar.gz
MFC r304440, r304487:
Fix some handling of P2_PTRACE_FSTP.
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r--sys/kern/sys_process.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index 7d2fd72..69a3e4b 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -693,12 +693,13 @@ sys_ptrace(struct thread *td, struct ptrace_args *uap)
#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, pid_t pid, void *addr, int data)
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, pid_t pid, void *addr, int data)
* 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);
}
OpenPOWER on IntegriCloud