[Midnightbsd-cvs] src [8798] trunk/sys: allow ptrace(2) op on the child created by vfork(2) if the debugger is not present.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Sun Sep 25 23:26:19 EDT 2016
Revision: 8798
http://svnweb.midnightbsd.org/src/?rev=8798
Author: laffer1
Date: 2016-09-25 23:26:19 -0400 (Sun, 25 Sep 2016)
Log Message:
-----------
allow ptrace(2) op on the child created by vfork(2) if the debugger is not present.
Modified Paths:
--------------
trunk/sys/kern/kern_exec.c
trunk/sys/kern/kern_exit.c
trunk/sys/kern/kern_sig.c
trunk/sys/kern/sys_process.c
trunk/sys/sys/proc.h
Modified: trunk/sys/kern/kern_exec.c
===================================================================
--- trunk/sys/kern/kern_exec.c 2016-09-26 03:25:36 UTC (rev 8797)
+++ trunk/sys/kern/kern_exec.c 2016-09-26 03:26:19 UTC (rev 8798)
@@ -646,7 +646,7 @@
*/
p->p_flag |= P_EXEC;
if (p->p_pptr && (p->p_flag & P_PPWAIT)) {
- p->p_flag &= ~P_PPWAIT;
+ p->p_flag &= ~(P_PPWAIT | P_PPTRACE);
cv_broadcast(&p->p_pwait);
}
Modified: trunk/sys/kern/kern_exit.c
===================================================================
--- trunk/sys/kern/kern_exit.c 2016-09-26 03:25:36 UTC (rev 8797)
+++ trunk/sys/kern/kern_exit.c 2016-09-26 03:26:19 UTC (rev 8798)
@@ -259,7 +259,7 @@
PROC_LOCK(p);
rv = p->p_xstat; /* Event handler could change exit status */
stopprofclock(p);
- p->p_flag &= ~(P_TRACED | P_PPWAIT);
+ p->p_flag &= ~(P_TRACED | P_PPWAIT | P_PPTRACE);
/*
* Stop the real interval timer. If the handler is currently
Modified: trunk/sys/kern/kern_sig.c
===================================================================
--- trunk/sys/kern/kern_sig.c 2016-09-26 03:25:36 UTC (rev 8797)
+++ trunk/sys/kern/kern_sig.c 2016-09-26 03:26:19 UTC (rev 8798)
@@ -2565,7 +2565,7 @@
sigqueue_delete(&p->p_sigqueue, sig);
continue;
}
- if (p->p_flag & P_TRACED && (p->p_flag & P_PPWAIT) == 0) {
+ if (p->p_flag & P_TRACED && (p->p_flag & P_PPTRACE) == 0) {
/*
* If traced, always stop.
* Remove old signal from queue before the stop.
Modified: trunk/sys/kern/sys_process.c
===================================================================
--- trunk/sys/kern/sys_process.c 2016-09-26 03:25:36 UTC (rev 8797)
+++ trunk/sys/kern/sys_process.c 2016-09-26 03:26:19 UTC (rev 8798)
@@ -824,6 +824,8 @@
case PT_TRACE_ME:
/* set my trace flag and "owner" so it can read/write me */
p->p_flag |= P_TRACED;
+ if (p->p_flag & P_PPWAIT)
+ p->p_flag |= P_PPTRACE;
p->p_oppid = p->p_pptr->p_pid;
break;
Modified: trunk/sys/sys/proc.h
===================================================================
--- trunk/sys/sys/proc.h 2016-09-26 03:25:36 UTC (rev 8797)
+++ trunk/sys/sys/proc.h 2016-09-26 03:26:19 UTC (rev 8798)
@@ -639,6 +639,7 @@
#define P_INMEM 0x10000000 /* Loaded into memory. */
#define P_SWAPPINGOUT 0x20000000 /* Process is being swapped out. */
#define P_SWAPPINGIN 0x40000000 /* Process is being swapped in. */
+#define P_PPTRACE 0x80000000 /* PT_TRACEME by vforked child. */
#define P_STOPPED (P_STOPPED_SIG|P_STOPPED_SINGLE|P_STOPPED_TRACE)
#define P_SHOULDSTOP(p) ((p)->p_flag & P_STOPPED)
More information about the Midnightbsd-cvs
mailing list