xref: /freebsd/tests/sys/kern/ptrace_test.c (revision 9768746b)
1 /*-
2  * Copyright (c) 2015 John Baldwin <jhb@FreeBSD.org>
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23  * SUCH DAMAGE.
24  */
25 
26 #include <sys/cdefs.h>
27 __FBSDID("$FreeBSD$");
28 
29 #include <sys/types.h>
30 #include <sys/cpuset.h>
31 #include <sys/elf.h>
32 #include <sys/event.h>
33 #include <sys/file.h>
34 #include <sys/time.h>
35 #include <sys/procctl.h>
36 #include <sys/procdesc.h>
37 #include <sys/ptrace.h>
38 #include <sys/procfs.h>
39 #include <sys/queue.h>
40 #include <sys/runq.h>
41 #include <sys/syscall.h>
42 #include <sys/sysctl.h>
43 #include <sys/user.h>
44 #include <sys/wait.h>
45 #include <errno.h>
46 #include <machine/cpufunc.h>
47 #include <pthread.h>
48 #include <sched.h>
49 #include <semaphore.h>
50 #include <signal.h>
51 #include <stdarg.h>
52 #include <stdio.h>
53 #include <stdlib.h>
54 #include <unistd.h>
55 #include <atf-c.h>
56 
57 /*
58  * Architectures with a user-visible breakpoint().
59  */
60 #if defined(__aarch64__) || defined(__amd64__) || defined(__arm__) ||	\
61     defined(__i386__) || defined(__riscv)
62 #define	HAVE_BREAKPOINT
63 #endif
64 
65 /*
66  * Adjust PC to skip over a breakpoint when stopped for a breakpoint trap.
67  */
68 #ifdef HAVE_BREAKPOINT
69 #if defined(__aarch64__)
70 #define	SKIP_BREAK(reg)	((reg)->elr += 4)
71 #elif defined(__amd64__) || defined(__i386__)
72 #define	SKIP_BREAK(reg)
73 #elif defined(__arm__)
74 #define	SKIP_BREAK(reg)	((reg)->r_pc += 4)
75 #elif defined(__riscv)
76 #define	SKIP_BREAK(reg)	((reg)->sepc += 4)
77 #endif
78 #endif
79 
80 /*
81  * A variant of ATF_REQUIRE that is suitable for use in child
82  * processes.  This only works if the parent process is tripped up by
83  * the early exit and fails some requirement itself.
84  */
85 #define	CHILD_REQUIRE(exp) do {				\
86 	if (!(exp))					\
87 		child_fail_require(__FILE__, __LINE__,	\
88 		    #exp " not met\n");			\
89 } while (0)
90 
91 #define	CHILD_REQUIRE_EQ(actual, expected) do {			\
92 	__typeof__(expected) _e = expected;			\
93 	__typeof__(actual) _a = actual;				\
94 	if (_e != _a)						\
95 		child_fail_require(__FILE__, __LINE__, #actual	\
96 		    " (%jd) == " #expected " (%jd) not met\n",	\
97 		    (intmax_t)_a, (intmax_t)_e);		\
98 } while (0)
99 
100 static __dead2 void
101 child_fail_require(const char *file, int line, const char *fmt, ...)
102 {
103 	va_list ap;
104 	char buf[1024];
105 
106 	/* Use write() not fprintf() to avoid possible duplicate output. */
107 	snprintf(buf, sizeof(buf), "%s:%d: ", file, line);
108 	write(STDERR_FILENO, buf, strlen(buf));
109 	va_start(ap, fmt);
110 	vsnprintf(buf, sizeof(buf), fmt, ap);
111 	write(STDERR_FILENO, buf, strlen(buf));
112 	va_end(ap);
113 
114 	_exit(32);
115 }
116 
117 #define	REQUIRE_EQ(actual, expected) do {				\
118 	__typeof__(expected) _e = expected;				\
119 	__typeof__(actual) _a = actual;					\
120 	ATF_REQUIRE_MSG(_e == _a, #actual " (%jd) == "			\
121 	    #expected " (%jd) not met", (intmax_t)_a, (intmax_t)_e);	\
122 } while (0)
123 
124 static void
125 trace_me(void)
126 {
127 
128 	/* Attach the parent process as a tracer of this process. */
129 	CHILD_REQUIRE(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
130 
131 	/* Trigger a stop. */
132 	raise(SIGSTOP);
133 }
134 
135 static void
136 attach_child(pid_t pid)
137 {
138 	pid_t wpid;
139 	int status;
140 
141 	REQUIRE_EQ(ptrace(PT_ATTACH, pid, NULL, 0), 0);
142 
143 	wpid = waitpid(pid, &status, 0);
144 	REQUIRE_EQ(wpid, pid);
145 	ATF_REQUIRE(WIFSTOPPED(status));
146 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
147 }
148 
149 static void
150 wait_for_zombie(pid_t pid)
151 {
152 
153 	/*
154 	 * Wait for a process to exit.  This is kind of gross, but
155 	 * there is not a better way.
156 	 *
157 	 * Prior to r325719, the kern.proc.pid.<pid> sysctl failed
158 	 * with ESRCH.  After that change, a valid struct kinfo_proc
159 	 * is returned for zombies with ki_stat set to SZOMB.
160 	 */
161 	for (;;) {
162 		struct kinfo_proc kp;
163 		size_t len;
164 		int mib[4];
165 
166 		mib[0] = CTL_KERN;
167 		mib[1] = KERN_PROC;
168 		mib[2] = KERN_PROC_PID;
169 		mib[3] = pid;
170 		len = sizeof(kp);
171 		if (sysctl(mib, nitems(mib), &kp, &len, NULL, 0) == -1) {
172 			REQUIRE_EQ(errno, ESRCH);
173 			break;
174 		}
175 		if (kp.ki_stat == SZOMB)
176 			break;
177 		usleep(5000);
178 	}
179 }
180 
181 /*
182  * Verify that a parent debugger process "sees" the exit of a debugged
183  * process exactly once when attached via PT_TRACE_ME.
184  */
185 ATF_TC_WITHOUT_HEAD(ptrace__parent_wait_after_trace_me);
186 ATF_TC_BODY(ptrace__parent_wait_after_trace_me, tc)
187 {
188 	pid_t child, wpid;
189 	int status;
190 
191 	ATF_REQUIRE((child = fork()) != -1);
192 	if (child == 0) {
193 		/* Child process. */
194 		trace_me();
195 
196 		_exit(1);
197 	}
198 
199 	/* Parent process. */
200 
201 	/* The first wait() should report the stop from SIGSTOP. */
202 	wpid = waitpid(child, &status, 0);
203 	REQUIRE_EQ(wpid, child);
204 	ATF_REQUIRE(WIFSTOPPED(status));
205 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
206 
207 	/* Continue the child ignoring the SIGSTOP. */
208 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
209 
210 	/* The second wait() should report the exit status. */
211 	wpid = waitpid(child, &status, 0);
212 	REQUIRE_EQ(wpid, child);
213 	ATF_REQUIRE(WIFEXITED(status));
214 	REQUIRE_EQ(WEXITSTATUS(status), 1);
215 
216 	/* The child should no longer exist. */
217 	wpid = waitpid(child, &status, 0);
218 	REQUIRE_EQ(wpid, -1);
219 	REQUIRE_EQ(errno, ECHILD);
220 }
221 
222 /*
223  * Verify that a parent debugger process "sees" the exit of a debugged
224  * process exactly once when attached via PT_ATTACH.
225  */
226 ATF_TC_WITHOUT_HEAD(ptrace__parent_wait_after_attach);
227 ATF_TC_BODY(ptrace__parent_wait_after_attach, tc)
228 {
229 	pid_t child, wpid;
230 	int cpipe[2], status;
231 	char c;
232 
233 	REQUIRE_EQ(pipe(cpipe), 0);
234 	ATF_REQUIRE((child = fork()) != -1);
235 	if (child == 0) {
236 		/* Child process. */
237 		close(cpipe[0]);
238 
239 		/* Wait for the parent to attach. */
240 		CHILD_REQUIRE_EQ(0, read(cpipe[1], &c, sizeof(c)));
241 
242 		_exit(1);
243 	}
244 	close(cpipe[1]);
245 
246 	/* Parent process. */
247 
248 	/* Attach to the child process. */
249 	attach_child(child);
250 
251 	/* Continue the child ignoring the SIGSTOP. */
252 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
253 
254 	/* Signal the child to exit. */
255 	close(cpipe[0]);
256 
257 	/* The second wait() should report the exit status. */
258 	wpid = waitpid(child, &status, 0);
259 	REQUIRE_EQ(wpid, child);
260 	ATF_REQUIRE(WIFEXITED(status));
261 	REQUIRE_EQ(WEXITSTATUS(status), 1);
262 
263 	/* The child should no longer exist. */
264 	wpid = waitpid(child, &status, 0);
265 	REQUIRE_EQ(wpid, -1);
266 	REQUIRE_EQ(errno, ECHILD);
267 }
268 
269 /*
270  * Verify that a parent process "sees" the exit of a debugged process only
271  * after the debugger has seen it.
272  */
273 ATF_TC_WITHOUT_HEAD(ptrace__parent_sees_exit_after_child_debugger);
274 ATF_TC_BODY(ptrace__parent_sees_exit_after_child_debugger, tc)
275 {
276 	pid_t child, debugger, wpid;
277 	int cpipe[2], dpipe[2], status;
278 	char c;
279 
280 	REQUIRE_EQ(pipe(cpipe), 0);
281 	ATF_REQUIRE((child = fork()) != -1);
282 
283 	if (child == 0) {
284 		/* Child process. */
285 		close(cpipe[0]);
286 
287 		/* Wait for parent to be ready. */
288 		CHILD_REQUIRE_EQ(read(cpipe[1], &c, sizeof(c)),
289 		    (ssize_t)sizeof(c));
290 
291 		_exit(1);
292 	}
293 	close(cpipe[1]);
294 
295 	REQUIRE_EQ(pipe(dpipe), 0);
296 	ATF_REQUIRE((debugger = fork()) != -1);
297 
298 	if (debugger == 0) {
299 		/* Debugger process. */
300 		close(dpipe[0]);
301 
302 		CHILD_REQUIRE(ptrace(PT_ATTACH, child, NULL, 0) != -1);
303 
304 		wpid = waitpid(child, &status, 0);
305 		CHILD_REQUIRE_EQ(wpid, child);
306 		CHILD_REQUIRE(WIFSTOPPED(status));
307 		CHILD_REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
308 
309 		CHILD_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
310 
311 		/* Signal parent that debugger is attached. */
312 		CHILD_REQUIRE_EQ(write(dpipe[1], &c, sizeof(c)),
313 		    (ssize_t)sizeof(c));
314 
315 		/* Wait for parent's failed wait. */
316 		CHILD_REQUIRE_EQ(read(dpipe[1], &c, sizeof(c)), 0);
317 
318 		wpid = waitpid(child, &status, 0);
319 		CHILD_REQUIRE_EQ(wpid, child);
320 		CHILD_REQUIRE(WIFEXITED(status));
321 		CHILD_REQUIRE_EQ(WEXITSTATUS(status), 1);
322 
323 		_exit(0);
324 	}
325 	close(dpipe[1]);
326 
327 	/* Parent process. */
328 
329 	/* Wait for the debugger to attach to the child. */
330 	REQUIRE_EQ(read(dpipe[0], &c, sizeof(c)), (ssize_t)sizeof(c));
331 
332 	/* Release the child. */
333 	REQUIRE_EQ(write(cpipe[0], &c, sizeof(c)), (ssize_t)sizeof(c));
334 	REQUIRE_EQ(read(cpipe[0], &c, sizeof(c)), 0);
335 	close(cpipe[0]);
336 
337 	wait_for_zombie(child);
338 
339 	/*
340 	 * This wait should return a pid of 0 to indicate no status to
341 	 * report.  The parent should see the child as non-exited
342 	 * until the debugger sees the exit.
343 	 */
344 	wpid = waitpid(child, &status, WNOHANG);
345 	REQUIRE_EQ(wpid, 0);
346 
347 	/* Signal the debugger to wait for the child. */
348 	close(dpipe[0]);
349 
350 	/* Wait for the debugger. */
351 	wpid = waitpid(debugger, &status, 0);
352 	REQUIRE_EQ(wpid, debugger);
353 	ATF_REQUIRE(WIFEXITED(status));
354 	REQUIRE_EQ(WEXITSTATUS(status), 0);
355 
356 	/* The child process should now be ready. */
357 	wpid = waitpid(child, &status, WNOHANG);
358 	REQUIRE_EQ(wpid, child);
359 	ATF_REQUIRE(WIFEXITED(status));
360 	REQUIRE_EQ(WEXITSTATUS(status), 1);
361 }
362 
363 /*
364  * Verify that a parent process "sees" the exit of a debugged process
365  * only after a non-direct-child debugger has seen it.  In particular,
366  * various wait() calls in the parent must avoid failing with ESRCH by
367  * checking the parent's orphan list for the debugee.
368  */
369 ATF_TC_WITHOUT_HEAD(ptrace__parent_sees_exit_after_unrelated_debugger);
370 ATF_TC_BODY(ptrace__parent_sees_exit_after_unrelated_debugger, tc)
371 {
372 	pid_t child, debugger, fpid, wpid;
373 	int cpipe[2], dpipe[2], status;
374 	char c;
375 
376 	REQUIRE_EQ(pipe(cpipe), 0);
377 	ATF_REQUIRE((child = fork()) != -1);
378 
379 	if (child == 0) {
380 		/* Child process. */
381 		close(cpipe[0]);
382 
383 		/* Wait for parent to be ready. */
384 		CHILD_REQUIRE_EQ(read(cpipe[1], &c, sizeof(c)),
385 		    (ssize_t)sizeof(c));
386 
387 		_exit(1);
388 	}
389 	close(cpipe[1]);
390 
391 	REQUIRE_EQ(pipe(dpipe), 0);
392 	ATF_REQUIRE((debugger = fork()) != -1);
393 
394 	if (debugger == 0) {
395 		/* Debugger parent. */
396 
397 		/*
398 		 * Fork again and drop the debugger parent so that the
399 		 * debugger is not a child of the main parent.
400 		 */
401 		CHILD_REQUIRE((fpid = fork()) != -1);
402 		if (fpid != 0)
403 			_exit(2);
404 
405 		/* Debugger process. */
406 		close(dpipe[0]);
407 
408 		CHILD_REQUIRE(ptrace(PT_ATTACH, child, NULL, 0) != -1);
409 
410 		wpid = waitpid(child, &status, 0);
411 		CHILD_REQUIRE_EQ(wpid, child);
412 		CHILD_REQUIRE(WIFSTOPPED(status));
413 		CHILD_REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
414 
415 		CHILD_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
416 
417 		/* Signal parent that debugger is attached. */
418 		CHILD_REQUIRE_EQ(write(dpipe[1], &c, sizeof(c)),
419 		    (ssize_t)sizeof(c));
420 
421 		/* Wait for parent's failed wait. */
422 		CHILD_REQUIRE_EQ(read(dpipe[1], &c, sizeof(c)),
423 		    (ssize_t)sizeof(c));
424 
425 		wpid = waitpid(child, &status, 0);
426 		CHILD_REQUIRE_EQ(wpid, child);
427 		CHILD_REQUIRE(WIFEXITED(status));
428 		CHILD_REQUIRE_EQ(WEXITSTATUS(status), 1);
429 
430 		_exit(0);
431 	}
432 	close(dpipe[1]);
433 
434 	/* Parent process. */
435 
436 	/* Wait for the debugger parent process to exit. */
437 	wpid = waitpid(debugger, &status, 0);
438 	REQUIRE_EQ(wpid, debugger);
439 	ATF_REQUIRE(WIFEXITED(status));
440 	REQUIRE_EQ(WEXITSTATUS(status), 2);
441 
442 	/* A WNOHANG wait here should see the non-exited child. */
443 	wpid = waitpid(child, &status, WNOHANG);
444 	REQUIRE_EQ(wpid, 0);
445 
446 	/* Wait for the debugger to attach to the child. */
447 	REQUIRE_EQ(read(dpipe[0], &c, sizeof(c)), (ssize_t)sizeof(c));
448 
449 	/* Release the child. */
450 	REQUIRE_EQ(write(cpipe[0], &c, sizeof(c)), (ssize_t)sizeof(c));
451 	REQUIRE_EQ(read(cpipe[0], &c, sizeof(c)), 0);
452 	close(cpipe[0]);
453 
454 	wait_for_zombie(child);
455 
456 	/*
457 	 * This wait should return a pid of 0 to indicate no status to
458 	 * report.  The parent should see the child as non-exited
459 	 * until the debugger sees the exit.
460 	 */
461 	wpid = waitpid(child, &status, WNOHANG);
462 	REQUIRE_EQ(wpid, 0);
463 
464 	/* Signal the debugger to wait for the child. */
465 	REQUIRE_EQ(write(dpipe[0], &c, sizeof(c)), (ssize_t)sizeof(c));
466 
467 	/* Wait for the debugger. */
468 	REQUIRE_EQ(read(dpipe[0], &c, sizeof(c)), 0);
469 	close(dpipe[0]);
470 
471 	/* The child process should now be ready. */
472 	wpid = waitpid(child, &status, WNOHANG);
473 	REQUIRE_EQ(wpid, child);
474 	ATF_REQUIRE(WIFEXITED(status));
475 	REQUIRE_EQ(WEXITSTATUS(status), 1);
476 }
477 
478 /*
479  * Make sure that we can collect the exit status of an orphaned process.
480  */
481 ATF_TC_WITHOUT_HEAD(ptrace__parent_exits_before_child);
482 ATF_TC_BODY(ptrace__parent_exits_before_child, tc)
483 {
484 	ssize_t n;
485 	int cpipe1[2], cpipe2[2], gcpipe[2], status;
486 	pid_t child, gchild;
487 
488 	REQUIRE_EQ(pipe(cpipe1), 0);
489 	REQUIRE_EQ(pipe(cpipe2), 0);
490 	REQUIRE_EQ(pipe(gcpipe), 0);
491 
492 	REQUIRE_EQ(procctl(P_PID, getpid(), PROC_REAP_ACQUIRE, NULL), 0);
493 
494 	ATF_REQUIRE((child = fork()) != -1);
495 	if (child == 0) {
496 		CHILD_REQUIRE((gchild = fork()) != -1);
497 		if (gchild == 0) {
498 			status = 1;
499 			do {
500 				n = read(gcpipe[0], &status, sizeof(status));
501 			} while (n == -1 && errno == EINTR);
502 			_exit(status);
503 		}
504 
505 		CHILD_REQUIRE_EQ(write(cpipe1[1], &gchild, sizeof(gchild)),
506 		    (ssize_t)sizeof(gchild));
507 		CHILD_REQUIRE_EQ(read(cpipe2[0], &status, sizeof(status)),
508 		    (ssize_t)sizeof(status));
509 		_exit(status);
510 	}
511 
512 	REQUIRE_EQ(read(cpipe1[0], &gchild, sizeof(gchild)),
513 	    (ssize_t)sizeof(gchild));
514 
515 	REQUIRE_EQ(ptrace(PT_ATTACH, gchild, NULL, 0), 0);
516 
517 	status = 0;
518 	REQUIRE_EQ(write(cpipe2[1], &status, sizeof(status)),
519 	    (ssize_t)sizeof(status));
520 	REQUIRE_EQ(waitpid(child, &status, 0), child);
521 	ATF_REQUIRE(WIFEXITED(status));
522 	REQUIRE_EQ(WEXITSTATUS(status), 0);
523 
524 	status = 0;
525 	REQUIRE_EQ(write(gcpipe[1], &status, sizeof(status)),
526 	    (ssize_t)sizeof(status));
527 	REQUIRE_EQ(waitpid(gchild, &status, 0), gchild);
528 	ATF_REQUIRE(WIFSTOPPED(status));
529 	REQUIRE_EQ(ptrace(PT_DETACH, gchild, (caddr_t)1, 0), 0);
530 	REQUIRE_EQ(waitpid(gchild, &status, 0), gchild);
531 	ATF_REQUIRE(WIFEXITED(status));
532 	REQUIRE_EQ(WEXITSTATUS(status), 0);
533 
534 	REQUIRE_EQ(close(cpipe1[0]), 0);
535 	REQUIRE_EQ(close(cpipe1[1]), 0);
536 	REQUIRE_EQ(close(cpipe2[0]), 0);
537 	REQUIRE_EQ(close(cpipe2[1]), 0);
538 	REQUIRE_EQ(close(gcpipe[0]), 0);
539 	REQUIRE_EQ(close(gcpipe[1]), 0);
540 }
541 
542 /*
543  * The parent process should always act the same regardless of how the
544  * debugger is attached to it.
545  */
546 static __dead2 void
547 follow_fork_parent(bool use_vfork)
548 {
549 	pid_t fpid, wpid;
550 	int status;
551 
552 	if (use_vfork)
553 		CHILD_REQUIRE((fpid = vfork()) != -1);
554 	else
555 		CHILD_REQUIRE((fpid = fork()) != -1);
556 
557 	if (fpid == 0)
558 		/* Child */
559 		_exit(2);
560 
561 	wpid = waitpid(fpid, &status, 0);
562 	CHILD_REQUIRE_EQ(wpid, fpid);
563 	CHILD_REQUIRE(WIFEXITED(status));
564 	CHILD_REQUIRE_EQ(WEXITSTATUS(status), 2);
565 
566 	_exit(1);
567 }
568 
569 /*
570  * Helper routine for follow fork tests.  This waits for two stops
571  * that report both "sides" of a fork.  It returns the pid of the new
572  * child process.
573  */
574 static pid_t
575 handle_fork_events(pid_t parent, struct ptrace_lwpinfo *ppl)
576 {
577 	struct ptrace_lwpinfo pl;
578 	bool fork_reported[2];
579 	pid_t child, wpid;
580 	int i, status;
581 
582 	fork_reported[0] = false;
583 	fork_reported[1] = false;
584 	child = -1;
585 
586 	/*
587 	 * Each process should report a fork event.  The parent should
588 	 * report a PL_FLAG_FORKED event, and the child should report
589 	 * a PL_FLAG_CHILD event.
590 	 */
591 	for (i = 0; i < 2; i++) {
592 		wpid = wait(&status);
593 		ATF_REQUIRE(wpid > 0);
594 		ATF_REQUIRE(WIFSTOPPED(status));
595 
596 		ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
597 		    sizeof(pl)) != -1);
598 		ATF_REQUIRE((pl.pl_flags & (PL_FLAG_FORKED | PL_FLAG_CHILD)) !=
599 		    0);
600 		ATF_REQUIRE((pl.pl_flags & (PL_FLAG_FORKED | PL_FLAG_CHILD)) !=
601 		    (PL_FLAG_FORKED | PL_FLAG_CHILD));
602 		if (pl.pl_flags & PL_FLAG_CHILD) {
603 			ATF_REQUIRE(wpid != parent);
604 			REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
605 			ATF_REQUIRE(!fork_reported[1]);
606 			if (child == -1)
607 				child = wpid;
608 			else
609 				REQUIRE_EQ(child, wpid);
610 			if (ppl != NULL)
611 				ppl[1] = pl;
612 			fork_reported[1] = true;
613 		} else {
614 			REQUIRE_EQ(wpid, parent);
615 			REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
616 			ATF_REQUIRE(!fork_reported[0]);
617 			if (child == -1)
618 				child = pl.pl_child_pid;
619 			else
620 				REQUIRE_EQ(child, pl.pl_child_pid);
621 			if (ppl != NULL)
622 				ppl[0] = pl;
623 			fork_reported[0] = true;
624 		}
625 	}
626 
627 	return (child);
628 }
629 
630 /*
631  * Verify that a new child process is stopped after a followed fork and
632  * that the traced parent sees the exit of the child after the debugger
633  * when both processes remain attached to the debugger.
634  */
635 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_both_attached);
636 ATF_TC_BODY(ptrace__follow_fork_both_attached, tc)
637 {
638 	pid_t children[2], fpid, wpid;
639 	int status;
640 
641 	ATF_REQUIRE((fpid = fork()) != -1);
642 	if (fpid == 0) {
643 		trace_me();
644 		follow_fork_parent(false);
645 	}
646 
647 	/* Parent process. */
648 	children[0] = fpid;
649 
650 	/* The first wait() should report the stop from SIGSTOP. */
651 	wpid = waitpid(children[0], &status, 0);
652 	REQUIRE_EQ(wpid, children[0]);
653 	ATF_REQUIRE(WIFSTOPPED(status));
654 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
655 
656 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
657 
658 	/* Continue the child ignoring the SIGSTOP. */
659 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
660 
661 	children[1] = handle_fork_events(children[0], NULL);
662 	ATF_REQUIRE(children[1] > 0);
663 
664 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
665 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
666 
667 	/*
668 	 * The child can't exit until the grandchild reports status, so the
669 	 * grandchild should report its exit first to the debugger.
670 	 */
671 	wpid = wait(&status);
672 	REQUIRE_EQ(wpid, children[1]);
673 	ATF_REQUIRE(WIFEXITED(status));
674 	REQUIRE_EQ(WEXITSTATUS(status), 2);
675 
676 	wpid = wait(&status);
677 	REQUIRE_EQ(wpid, children[0]);
678 	ATF_REQUIRE(WIFEXITED(status));
679 	REQUIRE_EQ(WEXITSTATUS(status), 1);
680 
681 	wpid = wait(&status);
682 	REQUIRE_EQ(wpid, -1);
683 	REQUIRE_EQ(errno, ECHILD);
684 }
685 
686 /*
687  * Verify that a new child process is stopped after a followed fork
688  * and that the traced parent sees the exit of the child when the new
689  * child process is detached after it reports its fork.
690  */
691 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_child_detached);
692 ATF_TC_BODY(ptrace__follow_fork_child_detached, tc)
693 {
694 	pid_t children[2], fpid, wpid;
695 	int status;
696 
697 	ATF_REQUIRE((fpid = fork()) != -1);
698 	if (fpid == 0) {
699 		trace_me();
700 		follow_fork_parent(false);
701 	}
702 
703 	/* Parent process. */
704 	children[0] = fpid;
705 
706 	/* The first wait() should report the stop from SIGSTOP. */
707 	wpid = waitpid(children[0], &status, 0);
708 	REQUIRE_EQ(wpid, children[0]);
709 	ATF_REQUIRE(WIFSTOPPED(status));
710 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
711 
712 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
713 
714 	/* Continue the child ignoring the SIGSTOP. */
715 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
716 
717 	children[1] = handle_fork_events(children[0], NULL);
718 	ATF_REQUIRE(children[1] > 0);
719 
720 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
721 	ATF_REQUIRE(ptrace(PT_DETACH, children[1], (caddr_t)1, 0) != -1);
722 
723 	/*
724 	 * Should not see any status from the grandchild now, only the
725 	 * child.
726 	 */
727 	wpid = wait(&status);
728 	REQUIRE_EQ(wpid, children[0]);
729 	ATF_REQUIRE(WIFEXITED(status));
730 	REQUIRE_EQ(WEXITSTATUS(status), 1);
731 
732 	wpid = wait(&status);
733 	REQUIRE_EQ(wpid, -1);
734 	REQUIRE_EQ(errno, ECHILD);
735 }
736 
737 /*
738  * Verify that a new child process is stopped after a followed fork
739  * and that the traced parent sees the exit of the child when the
740  * traced parent is detached after the fork.
741  */
742 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_parent_detached);
743 ATF_TC_BODY(ptrace__follow_fork_parent_detached, tc)
744 {
745 	pid_t children[2], fpid, wpid;
746 	int status;
747 
748 	ATF_REQUIRE((fpid = fork()) != -1);
749 	if (fpid == 0) {
750 		trace_me();
751 		follow_fork_parent(false);
752 	}
753 
754 	/* Parent process. */
755 	children[0] = fpid;
756 
757 	/* The first wait() should report the stop from SIGSTOP. */
758 	wpid = waitpid(children[0], &status, 0);
759 	REQUIRE_EQ(wpid, children[0]);
760 	ATF_REQUIRE(WIFSTOPPED(status));
761 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
762 
763 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
764 
765 	/* Continue the child ignoring the SIGSTOP. */
766 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
767 
768 	children[1] = handle_fork_events(children[0], NULL);
769 	ATF_REQUIRE(children[1] > 0);
770 
771 	ATF_REQUIRE(ptrace(PT_DETACH, children[0], (caddr_t)1, 0) != -1);
772 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
773 
774 	/*
775 	 * The child can't exit until the grandchild reports status, so the
776 	 * grandchild should report its exit first to the debugger.
777 	 *
778 	 * Even though the child process is detached, it is still a
779 	 * child of the debugger, so it will still report it's exit
780 	 * after the grandchild.
781 	 */
782 	wpid = wait(&status);
783 	REQUIRE_EQ(wpid, children[1]);
784 	ATF_REQUIRE(WIFEXITED(status));
785 	REQUIRE_EQ(WEXITSTATUS(status), 2);
786 
787 	wpid = wait(&status);
788 	REQUIRE_EQ(wpid, children[0]);
789 	ATF_REQUIRE(WIFEXITED(status));
790 	REQUIRE_EQ(WEXITSTATUS(status), 1);
791 
792 	wpid = wait(&status);
793 	REQUIRE_EQ(wpid, -1);
794 	REQUIRE_EQ(errno, ECHILD);
795 }
796 
797 static void
798 attach_fork_parent(int cpipe[2])
799 {
800 	pid_t fpid;
801 
802 	close(cpipe[0]);
803 
804 	/* Double-fork to disassociate from the debugger. */
805 	CHILD_REQUIRE((fpid = fork()) != -1);
806 	if (fpid != 0)
807 		_exit(3);
808 
809 	/* Send the pid of the disassociated child to the debugger. */
810 	fpid = getpid();
811 	CHILD_REQUIRE_EQ(write(cpipe[1], &fpid, sizeof(fpid)),
812 	    (ssize_t)sizeof(fpid));
813 
814 	/* Wait for the debugger to attach. */
815 	CHILD_REQUIRE_EQ(read(cpipe[1], &fpid, sizeof(fpid)), 0);
816 }
817 
818 /*
819  * Verify that a new child process is stopped after a followed fork and
820  * that the traced parent sees the exit of the child after the debugger
821  * when both processes remain attached to the debugger.  In this test
822  * the parent that forks is not a direct child of the debugger.
823  */
824 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_both_attached_unrelated_debugger);
825 ATF_TC_BODY(ptrace__follow_fork_both_attached_unrelated_debugger, tc)
826 {
827 	pid_t children[2], fpid, wpid;
828 	int cpipe[2], status;
829 
830 	REQUIRE_EQ(pipe(cpipe), 0);
831 	ATF_REQUIRE((fpid = fork()) != -1);
832 	if (fpid == 0) {
833 		attach_fork_parent(cpipe);
834 		follow_fork_parent(false);
835 	}
836 
837 	/* Parent process. */
838 	close(cpipe[1]);
839 
840 	/* Wait for the direct child to exit. */
841 	wpid = waitpid(fpid, &status, 0);
842 	REQUIRE_EQ(wpid, fpid);
843 	ATF_REQUIRE(WIFEXITED(status));
844 	REQUIRE_EQ(WEXITSTATUS(status), 3);
845 
846 	/* Read the pid of the fork parent. */
847 	REQUIRE_EQ(read(cpipe[0], &children[0], sizeof(children[0])),
848 	    (ssize_t)sizeof(children[0]));
849 
850 	/* Attach to the fork parent. */
851 	attach_child(children[0]);
852 
853 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
854 
855 	/* Continue the fork parent ignoring the SIGSTOP. */
856 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
857 
858 	/* Signal the fork parent to continue. */
859 	close(cpipe[0]);
860 
861 	children[1] = handle_fork_events(children[0], NULL);
862 	ATF_REQUIRE(children[1] > 0);
863 
864 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
865 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
866 
867 	/*
868 	 * The fork parent can't exit until the child reports status,
869 	 * so the child should report its exit first to the debugger.
870 	 */
871 	wpid = wait(&status);
872 	REQUIRE_EQ(wpid, children[1]);
873 	ATF_REQUIRE(WIFEXITED(status));
874 	REQUIRE_EQ(WEXITSTATUS(status), 2);
875 
876 	wpid = wait(&status);
877 	REQUIRE_EQ(wpid, children[0]);
878 	ATF_REQUIRE(WIFEXITED(status));
879 	REQUIRE_EQ(WEXITSTATUS(status), 1);
880 
881 	wpid = wait(&status);
882 	REQUIRE_EQ(wpid, -1);
883 	REQUIRE_EQ(errno, ECHILD);
884 }
885 
886 /*
887  * Verify that a new child process is stopped after a followed fork
888  * and that the traced parent sees the exit of the child when the new
889  * child process is detached after it reports its fork.  In this test
890  * the parent that forks is not a direct child of the debugger.
891  */
892 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_child_detached_unrelated_debugger);
893 ATF_TC_BODY(ptrace__follow_fork_child_detached_unrelated_debugger, tc)
894 {
895 	pid_t children[2], fpid, wpid;
896 	int cpipe[2], status;
897 
898 	REQUIRE_EQ(pipe(cpipe), 0);
899 	ATF_REQUIRE((fpid = fork()) != -1);
900 	if (fpid == 0) {
901 		attach_fork_parent(cpipe);
902 		follow_fork_parent(false);
903 	}
904 
905 	/* Parent process. */
906 	close(cpipe[1]);
907 
908 	/* Wait for the direct child to exit. */
909 	wpid = waitpid(fpid, &status, 0);
910 	REQUIRE_EQ(wpid, fpid);
911 	ATF_REQUIRE(WIFEXITED(status));
912 	REQUIRE_EQ(WEXITSTATUS(status), 3);
913 
914 	/* Read the pid of the fork parent. */
915 	REQUIRE_EQ(read(cpipe[0], &children[0], sizeof(children[0])),
916 	    (ssize_t)sizeof(children[0]));
917 
918 	/* Attach to the fork parent. */
919 	attach_child(children[0]);
920 
921 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
922 
923 	/* Continue the fork parent ignoring the SIGSTOP. */
924 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
925 
926 	/* Signal the fork parent to continue. */
927 	close(cpipe[0]);
928 
929 	children[1] = handle_fork_events(children[0], NULL);
930 	ATF_REQUIRE(children[1] > 0);
931 
932 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
933 	ATF_REQUIRE(ptrace(PT_DETACH, children[1], (caddr_t)1, 0) != -1);
934 
935 	/*
936 	 * Should not see any status from the child now, only the fork
937 	 * parent.
938 	 */
939 	wpid = wait(&status);
940 	REQUIRE_EQ(wpid, children[0]);
941 	ATF_REQUIRE(WIFEXITED(status));
942 	REQUIRE_EQ(WEXITSTATUS(status), 1);
943 
944 	wpid = wait(&status);
945 	REQUIRE_EQ(wpid, -1);
946 	REQUIRE_EQ(errno, ECHILD);
947 }
948 
949 /*
950  * Verify that a new child process is stopped after a followed fork
951  * and that the traced parent sees the exit of the child when the
952  * traced parent is detached after the fork.  In this test the parent
953  * that forks is not a direct child of the debugger.
954  */
955 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_parent_detached_unrelated_debugger);
956 ATF_TC_BODY(ptrace__follow_fork_parent_detached_unrelated_debugger, tc)
957 {
958 	pid_t children[2], fpid, wpid;
959 	int cpipe[2], status;
960 
961 	REQUIRE_EQ(pipe(cpipe), 0);
962 	ATF_REQUIRE((fpid = fork()) != -1);
963 	if (fpid == 0) {
964 		attach_fork_parent(cpipe);
965 		follow_fork_parent(false);
966 	}
967 
968 	/* Parent process. */
969 	close(cpipe[1]);
970 
971 	/* Wait for the direct child to exit. */
972 	wpid = waitpid(fpid, &status, 0);
973 	REQUIRE_EQ(wpid, fpid);
974 	ATF_REQUIRE(WIFEXITED(status));
975 	REQUIRE_EQ(WEXITSTATUS(status), 3);
976 
977 	/* Read the pid of the fork parent. */
978 	REQUIRE_EQ(read(cpipe[0], &children[0], sizeof(children[0])),
979 	    (ssize_t)sizeof(children[0]));
980 
981 	/* Attach to the fork parent. */
982 	attach_child(children[0]);
983 
984 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
985 
986 	/* Continue the fork parent ignoring the SIGSTOP. */
987 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
988 
989 	/* Signal the fork parent to continue. */
990 	close(cpipe[0]);
991 
992 	children[1] = handle_fork_events(children[0], NULL);
993 	ATF_REQUIRE(children[1] > 0);
994 
995 	ATF_REQUIRE(ptrace(PT_DETACH, children[0], (caddr_t)1, 0) != -1);
996 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
997 
998 	/*
999 	 * Should not see any status from the fork parent now, only
1000 	 * the child.
1001 	 */
1002 	wpid = wait(&status);
1003 	REQUIRE_EQ(wpid, children[1]);
1004 	ATF_REQUIRE(WIFEXITED(status));
1005 	REQUIRE_EQ(WEXITSTATUS(status), 2);
1006 
1007 	wpid = wait(&status);
1008 	REQUIRE_EQ(wpid, -1);
1009 	REQUIRE_EQ(errno, ECHILD);
1010 }
1011 
1012 /*
1013  * Verify that a child process does not see an unrelated debugger as its
1014  * parent but sees its original parent process.
1015  */
1016 ATF_TC_WITHOUT_HEAD(ptrace__getppid);
1017 ATF_TC_BODY(ptrace__getppid, tc)
1018 {
1019 	pid_t child, debugger, ppid, wpid;
1020 	int cpipe[2], dpipe[2], status;
1021 	char c;
1022 
1023 	REQUIRE_EQ(pipe(cpipe), 0);
1024 	ATF_REQUIRE((child = fork()) != -1);
1025 
1026 	if (child == 0) {
1027 		/* Child process. */
1028 		close(cpipe[0]);
1029 
1030 		/* Wait for parent to be ready. */
1031 		CHILD_REQUIRE_EQ(read(cpipe[1], &c, sizeof(c)),
1032 		    (ssize_t)sizeof(c));
1033 
1034 		/* Report the parent PID to the parent. */
1035 		ppid = getppid();
1036 		CHILD_REQUIRE_EQ(write(cpipe[1], &ppid, sizeof(ppid)),
1037 		    (ssize_t)sizeof(ppid));
1038 
1039 		_exit(1);
1040 	}
1041 	close(cpipe[1]);
1042 
1043 	REQUIRE_EQ(pipe(dpipe), 0);
1044 	ATF_REQUIRE((debugger = fork()) != -1);
1045 
1046 	if (debugger == 0) {
1047 		/* Debugger process. */
1048 		close(dpipe[0]);
1049 
1050 		CHILD_REQUIRE(ptrace(PT_ATTACH, child, NULL, 0) != -1);
1051 
1052 		wpid = waitpid(child, &status, 0);
1053 		CHILD_REQUIRE_EQ(wpid, child);
1054 		CHILD_REQUIRE(WIFSTOPPED(status));
1055 		CHILD_REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1056 
1057 		CHILD_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
1058 
1059 		/* Signal parent that debugger is attached. */
1060 		CHILD_REQUIRE_EQ(write(dpipe[1], &c, sizeof(c)),
1061 		    (ssize_t)sizeof(c));
1062 
1063 		/* Wait for traced child to exit. */
1064 		wpid = waitpid(child, &status, 0);
1065 		CHILD_REQUIRE_EQ(wpid, child);
1066 		CHILD_REQUIRE(WIFEXITED(status));
1067 		CHILD_REQUIRE_EQ(WEXITSTATUS(status), 1);
1068 
1069 		_exit(0);
1070 	}
1071 	close(dpipe[1]);
1072 
1073 	/* Parent process. */
1074 
1075 	/* Wait for the debugger to attach to the child. */
1076 	REQUIRE_EQ(read(dpipe[0], &c, sizeof(c)), (ssize_t)sizeof(c));
1077 
1078 	/* Release the child. */
1079 	REQUIRE_EQ(write(cpipe[0], &c, sizeof(c)), (ssize_t)sizeof(c));
1080 
1081 	/* Read the parent PID from the child. */
1082 	REQUIRE_EQ(read(cpipe[0], &ppid, sizeof(ppid)), (ssize_t)sizeof(ppid));
1083 	close(cpipe[0]);
1084 
1085 	REQUIRE_EQ(ppid, getpid());
1086 
1087 	/* Wait for the debugger. */
1088 	wpid = waitpid(debugger, &status, 0);
1089 	REQUIRE_EQ(wpid, debugger);
1090 	ATF_REQUIRE(WIFEXITED(status));
1091 	REQUIRE_EQ(WEXITSTATUS(status), 0);
1092 
1093 	/* The child process should now be ready. */
1094 	wpid = waitpid(child, &status, WNOHANG);
1095 	REQUIRE_EQ(wpid, child);
1096 	ATF_REQUIRE(WIFEXITED(status));
1097 	REQUIRE_EQ(WEXITSTATUS(status), 1);
1098 }
1099 
1100 /*
1101  * Verify that pl_syscall_code in struct ptrace_lwpinfo for a new
1102  * child process created via fork() reports the correct value.
1103  */
1104 ATF_TC_WITHOUT_HEAD(ptrace__new_child_pl_syscall_code_fork);
1105 ATF_TC_BODY(ptrace__new_child_pl_syscall_code_fork, tc)
1106 {
1107 	struct ptrace_lwpinfo pl[2];
1108 	pid_t children[2], fpid, wpid;
1109 	int status;
1110 
1111 	ATF_REQUIRE((fpid = fork()) != -1);
1112 	if (fpid == 0) {
1113 		trace_me();
1114 		follow_fork_parent(false);
1115 	}
1116 
1117 	/* Parent process. */
1118 	children[0] = fpid;
1119 
1120 	/* The first wait() should report the stop from SIGSTOP. */
1121 	wpid = waitpid(children[0], &status, 0);
1122 	REQUIRE_EQ(wpid, children[0]);
1123 	ATF_REQUIRE(WIFSTOPPED(status));
1124 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1125 
1126 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
1127 
1128 	/* Continue the child ignoring the SIGSTOP. */
1129 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1130 
1131 	/* Wait for both halves of the fork event to get reported. */
1132 	children[1] = handle_fork_events(children[0], pl);
1133 	ATF_REQUIRE(children[1] > 0);
1134 
1135 	ATF_REQUIRE((pl[0].pl_flags & PL_FLAG_SCX) != 0);
1136 	ATF_REQUIRE((pl[1].pl_flags & PL_FLAG_SCX) != 0);
1137 	REQUIRE_EQ(pl[0].pl_syscall_code, (unsigned)SYS_fork);
1138 	REQUIRE_EQ(pl[0].pl_syscall_code, pl[1].pl_syscall_code);
1139 	REQUIRE_EQ(pl[0].pl_syscall_narg, pl[1].pl_syscall_narg);
1140 
1141 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1142 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
1143 
1144 	/*
1145 	 * The child can't exit until the grandchild reports status, so the
1146 	 * grandchild should report its exit first to the debugger.
1147 	 */
1148 	wpid = wait(&status);
1149 	REQUIRE_EQ(wpid, children[1]);
1150 	ATF_REQUIRE(WIFEXITED(status));
1151 	REQUIRE_EQ(WEXITSTATUS(status), 2);
1152 
1153 	wpid = wait(&status);
1154 	REQUIRE_EQ(wpid, children[0]);
1155 	ATF_REQUIRE(WIFEXITED(status));
1156 	REQUIRE_EQ(WEXITSTATUS(status), 1);
1157 
1158 	wpid = wait(&status);
1159 	REQUIRE_EQ(wpid, -1);
1160 	REQUIRE_EQ(errno, ECHILD);
1161 }
1162 
1163 /*
1164  * Verify that pl_syscall_code in struct ptrace_lwpinfo for a new
1165  * child process created via vfork() reports the correct value.
1166  */
1167 ATF_TC_WITHOUT_HEAD(ptrace__new_child_pl_syscall_code_vfork);
1168 ATF_TC_BODY(ptrace__new_child_pl_syscall_code_vfork, tc)
1169 {
1170 	struct ptrace_lwpinfo pl[2];
1171 	pid_t children[2], fpid, wpid;
1172 	int status;
1173 
1174 	ATF_REQUIRE((fpid = fork()) != -1);
1175 	if (fpid == 0) {
1176 		trace_me();
1177 		follow_fork_parent(true);
1178 	}
1179 
1180 	/* Parent process. */
1181 	children[0] = fpid;
1182 
1183 	/* The first wait() should report the stop from SIGSTOP. */
1184 	wpid = waitpid(children[0], &status, 0);
1185 	REQUIRE_EQ(wpid, children[0]);
1186 	ATF_REQUIRE(WIFSTOPPED(status));
1187 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1188 
1189 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
1190 
1191 	/* Continue the child ignoring the SIGSTOP. */
1192 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1193 
1194 	/* Wait for both halves of the fork event to get reported. */
1195 	children[1] = handle_fork_events(children[0], pl);
1196 	ATF_REQUIRE(children[1] > 0);
1197 
1198 	ATF_REQUIRE((pl[0].pl_flags & PL_FLAG_SCX) != 0);
1199 	ATF_REQUIRE((pl[1].pl_flags & PL_FLAG_SCX) != 0);
1200 	REQUIRE_EQ(pl[0].pl_syscall_code, (unsigned)SYS_vfork);
1201 	REQUIRE_EQ(pl[0].pl_syscall_code, pl[1].pl_syscall_code);
1202 	REQUIRE_EQ(pl[0].pl_syscall_narg, pl[1].pl_syscall_narg);
1203 
1204 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1205 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
1206 
1207 	/*
1208 	 * The child can't exit until the grandchild reports status, so the
1209 	 * grandchild should report its exit first to the debugger.
1210 	 */
1211 	wpid = wait(&status);
1212 	REQUIRE_EQ(wpid, children[1]);
1213 	ATF_REQUIRE(WIFEXITED(status));
1214 	REQUIRE_EQ(WEXITSTATUS(status), 2);
1215 
1216 	wpid = wait(&status);
1217 	REQUIRE_EQ(wpid, children[0]);
1218 	ATF_REQUIRE(WIFEXITED(status));
1219 	REQUIRE_EQ(WEXITSTATUS(status), 1);
1220 
1221 	wpid = wait(&status);
1222 	REQUIRE_EQ(wpid, -1);
1223 	REQUIRE_EQ(errno, ECHILD);
1224 }
1225 
1226 static void *
1227 simple_thread(void *arg __unused)
1228 {
1229 
1230 	pthread_exit(NULL);
1231 }
1232 
1233 static __dead2 void
1234 simple_thread_main(void)
1235 {
1236 	pthread_t thread;
1237 
1238 	CHILD_REQUIRE_EQ(pthread_create(&thread, NULL, simple_thread, NULL), 0);
1239 	CHILD_REQUIRE_EQ(pthread_join(thread, NULL), 0);
1240 	exit(1);
1241 }
1242 
1243 /*
1244  * Verify that pl_syscall_code in struct ptrace_lwpinfo for a new
1245  * thread reports the correct value.
1246  */
1247 ATF_TC_WITHOUT_HEAD(ptrace__new_child_pl_syscall_code_thread);
1248 ATF_TC_BODY(ptrace__new_child_pl_syscall_code_thread, tc)
1249 {
1250 	struct ptrace_lwpinfo pl;
1251 	pid_t fpid, wpid;
1252 	lwpid_t mainlwp;
1253 	int status;
1254 
1255 	ATF_REQUIRE((fpid = fork()) != -1);
1256 	if (fpid == 0) {
1257 		trace_me();
1258 		simple_thread_main();
1259 	}
1260 
1261 	/* The first wait() should report the stop from SIGSTOP. */
1262 	wpid = waitpid(fpid, &status, 0);
1263 	REQUIRE_EQ(wpid, fpid);
1264 	ATF_REQUIRE(WIFSTOPPED(status));
1265 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1266 
1267 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
1268 	    sizeof(pl)) != -1);
1269 	mainlwp = pl.pl_lwpid;
1270 
1271 	/*
1272 	 * Continue the child ignoring the SIGSTOP and tracing all
1273 	 * system call exits.
1274 	 */
1275 	ATF_REQUIRE(ptrace(PT_TO_SCX, fpid, (caddr_t)1, 0) != -1);
1276 
1277 	/*
1278 	 * Wait for the new thread to arrive.  pthread_create() might
1279 	 * invoke any number of system calls.  For now we just wait
1280 	 * for the new thread to arrive and make sure it reports a
1281 	 * valid system call code.  If ptrace grows thread event
1282 	 * reporting then this test can be made more precise.
1283 	 */
1284 	for (;;) {
1285 		wpid = waitpid(fpid, &status, 0);
1286 		REQUIRE_EQ(wpid, fpid);
1287 		ATF_REQUIRE(WIFSTOPPED(status));
1288 		REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1289 
1290 		ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
1291 		    sizeof(pl)) != -1);
1292 		ATF_REQUIRE((pl.pl_flags & PL_FLAG_SCX) != 0);
1293 		ATF_REQUIRE(pl.pl_syscall_code != 0);
1294 		if (pl.pl_lwpid != mainlwp)
1295 			/* New thread seen. */
1296 			break;
1297 
1298 		REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1299 	}
1300 
1301 	/* Wait for the child to exit. */
1302 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1303 	for (;;) {
1304 		wpid = waitpid(fpid, &status, 0);
1305 		REQUIRE_EQ(wpid, fpid);
1306 		if (WIFEXITED(status))
1307 			break;
1308 
1309 		ATF_REQUIRE(WIFSTOPPED(status));
1310 		REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1311 		REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1312 	}
1313 
1314 	REQUIRE_EQ(WEXITSTATUS(status), 1);
1315 
1316 	wpid = wait(&status);
1317 	REQUIRE_EQ(wpid, -1);
1318 	REQUIRE_EQ(errno, ECHILD);
1319 }
1320 
1321 /*
1322  * Verify that the expected LWP events are reported for a child thread.
1323  */
1324 ATF_TC_WITHOUT_HEAD(ptrace__lwp_events);
1325 ATF_TC_BODY(ptrace__lwp_events, tc)
1326 {
1327 	struct ptrace_lwpinfo pl;
1328 	pid_t fpid, wpid;
1329 	lwpid_t lwps[2];
1330 	int status;
1331 
1332 	ATF_REQUIRE((fpid = fork()) != -1);
1333 	if (fpid == 0) {
1334 		trace_me();
1335 		simple_thread_main();
1336 	}
1337 
1338 	/* The first wait() should report the stop from SIGSTOP. */
1339 	wpid = waitpid(fpid, &status, 0);
1340 	REQUIRE_EQ(wpid, fpid);
1341 	ATF_REQUIRE(WIFSTOPPED(status));
1342 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1343 
1344 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
1345 	    sizeof(pl)) != -1);
1346 	lwps[0] = pl.pl_lwpid;
1347 
1348 	REQUIRE_EQ(ptrace(PT_LWP_EVENTS, wpid, NULL, 1), 0);
1349 
1350 	/* Continue the child ignoring the SIGSTOP. */
1351 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1352 
1353 	/* The first event should be for the child thread's birth. */
1354 	wpid = waitpid(fpid, &status, 0);
1355 	REQUIRE_EQ(wpid, fpid);
1356 	ATF_REQUIRE(WIFSTOPPED(status));
1357 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1358 
1359 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1360 	REQUIRE_EQ((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)),
1361 	    (PL_FLAG_BORN | PL_FLAG_SCX));
1362 	ATF_REQUIRE(pl.pl_lwpid != lwps[0]);
1363 	lwps[1] = pl.pl_lwpid;
1364 
1365 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1366 
1367 	/* The next event should be for the child thread's death. */
1368 	wpid = waitpid(fpid, &status, 0);
1369 	REQUIRE_EQ(wpid, fpid);
1370 	ATF_REQUIRE(WIFSTOPPED(status));
1371 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1372 
1373 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1374 	REQUIRE_EQ((pl.pl_flags & (PL_FLAG_EXITED | PL_FLAG_SCE)),
1375 	    (PL_FLAG_EXITED | PL_FLAG_SCE));
1376 	REQUIRE_EQ(pl.pl_lwpid, lwps[1]);
1377 
1378 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1379 
1380 	/* The last event should be for the child process's exit. */
1381 	wpid = waitpid(fpid, &status, 0);
1382 	ATF_REQUIRE(WIFEXITED(status));
1383 	REQUIRE_EQ(WEXITSTATUS(status), 1);
1384 
1385 	wpid = wait(&status);
1386 	REQUIRE_EQ(wpid, -1);
1387 	REQUIRE_EQ(errno, ECHILD);
1388 }
1389 
1390 static void *
1391 exec_thread(void *arg __unused)
1392 {
1393 
1394 	execl("/usr/bin/true", "true", NULL);
1395 	exit(127);
1396 }
1397 
1398 static __dead2 void
1399 exec_thread_main(void)
1400 {
1401 	pthread_t thread;
1402 
1403 	CHILD_REQUIRE_EQ(pthread_create(&thread, NULL, exec_thread, NULL), 0);
1404 	for (;;)
1405 		sleep(60);
1406 	exit(1);
1407 }
1408 
1409 /*
1410  * Verify that the expected LWP events are reported for a multithreaded
1411  * process that calls execve(2).
1412  */
1413 ATF_TC_WITHOUT_HEAD(ptrace__lwp_events_exec);
1414 ATF_TC_BODY(ptrace__lwp_events_exec, tc)
1415 {
1416 	struct ptrace_lwpinfo pl;
1417 	pid_t fpid, wpid;
1418 	lwpid_t lwps[2];
1419 	int status;
1420 
1421 	ATF_REQUIRE((fpid = fork()) != -1);
1422 	if (fpid == 0) {
1423 		trace_me();
1424 		exec_thread_main();
1425 	}
1426 
1427 	/* The first wait() should report the stop from SIGSTOP. */
1428 	wpid = waitpid(fpid, &status, 0);
1429 	REQUIRE_EQ(wpid, fpid);
1430 	ATF_REQUIRE(WIFSTOPPED(status));
1431 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1432 
1433 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
1434 	    sizeof(pl)) != -1);
1435 	lwps[0] = pl.pl_lwpid;
1436 
1437 	REQUIRE_EQ(ptrace(PT_LWP_EVENTS, wpid, NULL, 1), 0);
1438 
1439 	/* Continue the child ignoring the SIGSTOP. */
1440 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1441 
1442 	/* The first event should be for the child thread's birth. */
1443 	wpid = waitpid(fpid, &status, 0);
1444 	REQUIRE_EQ(wpid, fpid);
1445 	ATF_REQUIRE(WIFSTOPPED(status));
1446 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1447 
1448 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1449 	REQUIRE_EQ((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)),
1450 	    (PL_FLAG_BORN | PL_FLAG_SCX));
1451 	ATF_REQUIRE(pl.pl_lwpid != lwps[0]);
1452 	lwps[1] = pl.pl_lwpid;
1453 
1454 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1455 
1456 	/*
1457 	 * The next event should be for the main thread's death due to
1458 	 * single threading from execve().
1459 	 */
1460 	wpid = waitpid(fpid, &status, 0);
1461 	REQUIRE_EQ(wpid, fpid);
1462 	ATF_REQUIRE(WIFSTOPPED(status));
1463 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1464 
1465 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1466 	REQUIRE_EQ((pl.pl_flags & (PL_FLAG_EXITED | PL_FLAG_SCE)),
1467 	    (PL_FLAG_EXITED));
1468 	REQUIRE_EQ(pl.pl_lwpid, lwps[0]);
1469 
1470 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1471 
1472 	/* The next event should be for the child process's exec. */
1473 	wpid = waitpid(fpid, &status, 0);
1474 	ATF_REQUIRE(WIFSTOPPED(status));
1475 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1476 
1477 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1478 	REQUIRE_EQ((pl.pl_flags & (PL_FLAG_EXEC | PL_FLAG_SCX)),
1479 	    (PL_FLAG_EXEC | PL_FLAG_SCX));
1480 	REQUIRE_EQ(pl.pl_lwpid, lwps[1]);
1481 
1482 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1483 
1484 	/* The last event should be for the child process's exit. */
1485 	wpid = waitpid(fpid, &status, 0);
1486 	ATF_REQUIRE(WIFEXITED(status));
1487 	REQUIRE_EQ(WEXITSTATUS(status), 0);
1488 
1489 	wpid = wait(&status);
1490 	REQUIRE_EQ(wpid, -1);
1491 	REQUIRE_EQ(errno, ECHILD);
1492 }
1493 
1494 static void
1495 handler(int sig __unused)
1496 {
1497 }
1498 
1499 static void
1500 signal_main(void)
1501 {
1502 
1503 	signal(SIGINFO, handler);
1504 	raise(SIGINFO);
1505 	exit(0);
1506 }
1507 
1508 /*
1509  * Verify that the expected ptrace event is reported for a signal.
1510  */
1511 ATF_TC_WITHOUT_HEAD(ptrace__siginfo);
1512 ATF_TC_BODY(ptrace__siginfo, tc)
1513 {
1514 	struct ptrace_lwpinfo pl;
1515 	pid_t fpid, wpid;
1516 	int status;
1517 
1518 	ATF_REQUIRE((fpid = fork()) != -1);
1519 	if (fpid == 0) {
1520 		trace_me();
1521 		signal_main();
1522 	}
1523 
1524 	/* The first wait() should report the stop from SIGSTOP. */
1525 	wpid = waitpid(fpid, &status, 0);
1526 	REQUIRE_EQ(wpid, fpid);
1527 	ATF_REQUIRE(WIFSTOPPED(status));
1528 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1529 
1530 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1531 
1532 	/* The next event should be for the SIGINFO. */
1533 	wpid = waitpid(fpid, &status, 0);
1534 	ATF_REQUIRE(WIFSTOPPED(status));
1535 	REQUIRE_EQ(WSTOPSIG(status), SIGINFO);
1536 
1537 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1538 	REQUIRE_EQ(pl.pl_event, PL_EVENT_SIGNAL);
1539 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
1540 	REQUIRE_EQ(pl.pl_siginfo.si_code, SI_LWP);
1541 	REQUIRE_EQ(pl.pl_siginfo.si_pid, wpid);
1542 
1543 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1544 
1545 	/* The last event should be for the child process's exit. */
1546 	wpid = waitpid(fpid, &status, 0);
1547 	ATF_REQUIRE(WIFEXITED(status));
1548 	REQUIRE_EQ(WEXITSTATUS(status), 0);
1549 
1550 	wpid = wait(&status);
1551 	REQUIRE_EQ(wpid, -1);
1552 	REQUIRE_EQ(errno, ECHILD);
1553 }
1554 
1555 /*
1556  * Verify that the expected ptrace events are reported for PTRACE_EXEC.
1557  */
1558 ATF_TC_WITHOUT_HEAD(ptrace__ptrace_exec_disable);
1559 ATF_TC_BODY(ptrace__ptrace_exec_disable, tc)
1560 {
1561 	pid_t fpid, wpid;
1562 	int events, status;
1563 
1564 	ATF_REQUIRE((fpid = fork()) != -1);
1565 	if (fpid == 0) {
1566 		trace_me();
1567 		exec_thread(NULL);
1568 	}
1569 
1570 	/* The first wait() should report the stop from SIGSTOP. */
1571 	wpid = waitpid(fpid, &status, 0);
1572 	REQUIRE_EQ(wpid, fpid);
1573 	ATF_REQUIRE(WIFSTOPPED(status));
1574 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1575 
1576 	events = 0;
1577 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, fpid, (caddr_t)&events,
1578 	    sizeof(events)) == 0);
1579 
1580 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1581 
1582 	/* Should get one event at exit. */
1583 	wpid = waitpid(fpid, &status, 0);
1584 	ATF_REQUIRE(WIFEXITED(status));
1585 	REQUIRE_EQ(WEXITSTATUS(status), 0);
1586 
1587 	wpid = wait(&status);
1588 	REQUIRE_EQ(wpid, -1);
1589 	REQUIRE_EQ(errno, ECHILD);
1590 }
1591 
1592 ATF_TC_WITHOUT_HEAD(ptrace__ptrace_exec_enable);
1593 ATF_TC_BODY(ptrace__ptrace_exec_enable, tc)
1594 {
1595 	struct ptrace_lwpinfo pl;
1596 	pid_t fpid, wpid;
1597 	int events, status;
1598 
1599 	ATF_REQUIRE((fpid = fork()) != -1);
1600 	if (fpid == 0) {
1601 		trace_me();
1602 		exec_thread(NULL);
1603 	}
1604 
1605 	/* The first wait() should report the stop from SIGSTOP. */
1606 	wpid = waitpid(fpid, &status, 0);
1607 	REQUIRE_EQ(wpid, fpid);
1608 	ATF_REQUIRE(WIFSTOPPED(status));
1609 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1610 
1611 	events = PTRACE_EXEC;
1612 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, fpid, (caddr_t)&events,
1613 	    sizeof(events)) == 0);
1614 
1615 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1616 
1617 	/* The next event should be for the child process's exec. */
1618 	wpid = waitpid(fpid, &status, 0);
1619 	ATF_REQUIRE(WIFSTOPPED(status));
1620 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1621 
1622 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1623 	REQUIRE_EQ((pl.pl_flags & (PL_FLAG_EXEC | PL_FLAG_SCX)),
1624 	    (PL_FLAG_EXEC | PL_FLAG_SCX));
1625 
1626 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1627 
1628 	/* The last event should be for the child process's exit. */
1629 	wpid = waitpid(fpid, &status, 0);
1630 	ATF_REQUIRE(WIFEXITED(status));
1631 	REQUIRE_EQ(WEXITSTATUS(status), 0);
1632 
1633 	wpid = wait(&status);
1634 	REQUIRE_EQ(wpid, -1);
1635 	REQUIRE_EQ(errno, ECHILD);
1636 }
1637 
1638 ATF_TC_WITHOUT_HEAD(ptrace__event_mask);
1639 ATF_TC_BODY(ptrace__event_mask, tc)
1640 {
1641 	pid_t fpid, wpid;
1642 	int events, status;
1643 
1644 	ATF_REQUIRE((fpid = fork()) != -1);
1645 	if (fpid == 0) {
1646 		trace_me();
1647 		exit(0);
1648 	}
1649 
1650 	/* The first wait() should report the stop from SIGSTOP. */
1651 	wpid = waitpid(fpid, &status, 0);
1652 	REQUIRE_EQ(wpid, fpid);
1653 	ATF_REQUIRE(WIFSTOPPED(status));
1654 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1655 
1656 	/* PT_FOLLOW_FORK should toggle the state of PTRACE_FORK. */
1657 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, fpid, NULL, 1) != -1);
1658 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
1659 	    sizeof(events)) == 0);
1660 	ATF_REQUIRE(events & PTRACE_FORK);
1661 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, fpid, NULL, 0) != -1);
1662 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
1663 	    sizeof(events)) == 0);
1664 	ATF_REQUIRE(!(events & PTRACE_FORK));
1665 
1666 	/* PT_LWP_EVENTS should toggle the state of PTRACE_LWP. */
1667 	ATF_REQUIRE(ptrace(PT_LWP_EVENTS, fpid, NULL, 1) != -1);
1668 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
1669 	    sizeof(events)) == 0);
1670 	ATF_REQUIRE(events & PTRACE_LWP);
1671 	ATF_REQUIRE(ptrace(PT_LWP_EVENTS, fpid, NULL, 0) != -1);
1672 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
1673 	    sizeof(events)) == 0);
1674 	ATF_REQUIRE(!(events & PTRACE_LWP));
1675 
1676 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1677 
1678 	/* Should get one event at exit. */
1679 	wpid = waitpid(fpid, &status, 0);
1680 	ATF_REQUIRE(WIFEXITED(status));
1681 	REQUIRE_EQ(WEXITSTATUS(status), 0);
1682 
1683 	wpid = wait(&status);
1684 	REQUIRE_EQ(wpid, -1);
1685 	REQUIRE_EQ(errno, ECHILD);
1686 }
1687 
1688 /*
1689  * Verify that the expected ptrace events are reported for PTRACE_VFORK.
1690  */
1691 ATF_TC_WITHOUT_HEAD(ptrace__ptrace_vfork);
1692 ATF_TC_BODY(ptrace__ptrace_vfork, tc)
1693 {
1694 	struct ptrace_lwpinfo pl;
1695 	pid_t fpid, wpid;
1696 	int events, status;
1697 
1698 	ATF_REQUIRE((fpid = fork()) != -1);
1699 	if (fpid == 0) {
1700 		trace_me();
1701 		follow_fork_parent(true);
1702 	}
1703 
1704 	/* The first wait() should report the stop from SIGSTOP. */
1705 	wpid = waitpid(fpid, &status, 0);
1706 	REQUIRE_EQ(wpid, fpid);
1707 	ATF_REQUIRE(WIFSTOPPED(status));
1708 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1709 
1710 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
1711 	    sizeof(events)) == 0);
1712 	events |= PTRACE_VFORK;
1713 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, fpid, (caddr_t)&events,
1714 	    sizeof(events)) == 0);
1715 
1716 	/* Continue the child ignoring the SIGSTOP. */
1717 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) != -1);
1718 
1719 	/* The next event should report the end of the vfork. */
1720 	wpid = wait(&status);
1721 	REQUIRE_EQ(wpid, fpid);
1722 	ATF_REQUIRE(WIFSTOPPED(status));
1723 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1724 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1725 	ATF_REQUIRE((pl.pl_flags & PL_FLAG_VFORK_DONE) != 0);
1726 
1727 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) != -1);
1728 
1729 	wpid = wait(&status);
1730 	REQUIRE_EQ(wpid, fpid);
1731 	ATF_REQUIRE(WIFEXITED(status));
1732 	REQUIRE_EQ(WEXITSTATUS(status), 1);
1733 
1734 	wpid = wait(&status);
1735 	REQUIRE_EQ(wpid, -1);
1736 	REQUIRE_EQ(errno, ECHILD);
1737 }
1738 
1739 ATF_TC_WITHOUT_HEAD(ptrace__ptrace_vfork_follow);
1740 ATF_TC_BODY(ptrace__ptrace_vfork_follow, tc)
1741 {
1742 	struct ptrace_lwpinfo pl[2];
1743 	pid_t children[2], fpid, wpid;
1744 	int events, status;
1745 
1746 	ATF_REQUIRE((fpid = fork()) != -1);
1747 	if (fpid == 0) {
1748 		trace_me();
1749 		follow_fork_parent(true);
1750 	}
1751 
1752 	/* Parent process. */
1753 	children[0] = fpid;
1754 
1755 	/* The first wait() should report the stop from SIGSTOP. */
1756 	wpid = waitpid(children[0], &status, 0);
1757 	REQUIRE_EQ(wpid, children[0]);
1758 	ATF_REQUIRE(WIFSTOPPED(status));
1759 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1760 
1761 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, children[0], (caddr_t)&events,
1762 	    sizeof(events)) == 0);
1763 	events |= PTRACE_FORK | PTRACE_VFORK;
1764 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, children[0], (caddr_t)&events,
1765 	    sizeof(events)) == 0);
1766 
1767 	/* Continue the child ignoring the SIGSTOP. */
1768 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1769 
1770 	/* Wait for both halves of the fork event to get reported. */
1771 	children[1] = handle_fork_events(children[0], pl);
1772 	ATF_REQUIRE(children[1] > 0);
1773 
1774 	ATF_REQUIRE((pl[0].pl_flags & PL_FLAG_VFORKED) != 0);
1775 
1776 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1777 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
1778 
1779 	/*
1780 	 * The child can't exit until the grandchild reports status, so the
1781 	 * grandchild should report its exit first to the debugger.
1782 	 */
1783 	wpid = waitpid(children[1], &status, 0);
1784 	REQUIRE_EQ(wpid, children[1]);
1785 	ATF_REQUIRE(WIFEXITED(status));
1786 	REQUIRE_EQ(WEXITSTATUS(status), 2);
1787 
1788 	/*
1789 	 * The child should report it's vfork() completion before it
1790 	 * exits.
1791 	 */
1792 	wpid = wait(&status);
1793 	REQUIRE_EQ(wpid, children[0]);
1794 	ATF_REQUIRE(WIFSTOPPED(status));
1795 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1796 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl[0], sizeof(pl[0])) !=
1797 	    -1);
1798 	ATF_REQUIRE((pl[0].pl_flags & PL_FLAG_VFORK_DONE) != 0);
1799 
1800 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1801 
1802 	wpid = wait(&status);
1803 	REQUIRE_EQ(wpid, children[0]);
1804 	ATF_REQUIRE(WIFEXITED(status));
1805 	REQUIRE_EQ(WEXITSTATUS(status), 1);
1806 
1807 	wpid = wait(&status);
1808 	REQUIRE_EQ(wpid, -1);
1809 	REQUIRE_EQ(errno, ECHILD);
1810 }
1811 
1812 #ifdef HAVE_BREAKPOINT
1813 /*
1814  * Verify that no more events are reported after PT_KILL except for the
1815  * process exit when stopped due to a breakpoint trap.
1816  */
1817 ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_breakpoint);
1818 ATF_TC_BODY(ptrace__PT_KILL_breakpoint, tc)
1819 {
1820 	pid_t fpid, wpid;
1821 	int status;
1822 
1823 	ATF_REQUIRE((fpid = fork()) != -1);
1824 	if (fpid == 0) {
1825 		trace_me();
1826 		breakpoint();
1827 		exit(1);
1828 	}
1829 
1830 	/* The first wait() should report the stop from SIGSTOP. */
1831 	wpid = waitpid(fpid, &status, 0);
1832 	REQUIRE_EQ(wpid, fpid);
1833 	ATF_REQUIRE(WIFSTOPPED(status));
1834 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1835 
1836 	/* Continue the child ignoring the SIGSTOP. */
1837 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1838 
1839 	/* The second wait() should report hitting the breakpoint. */
1840 	wpid = waitpid(fpid, &status, 0);
1841 	REQUIRE_EQ(wpid, fpid);
1842 	ATF_REQUIRE(WIFSTOPPED(status));
1843 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1844 
1845 	/* Kill the child process. */
1846 	REQUIRE_EQ(ptrace(PT_KILL, fpid, 0, 0), 0);
1847 
1848 	/* The last wait() should report the SIGKILL. */
1849 	wpid = waitpid(fpid, &status, 0);
1850 	REQUIRE_EQ(wpid, fpid);
1851 	ATF_REQUIRE(WIFSIGNALED(status));
1852 	REQUIRE_EQ(WTERMSIG(status), SIGKILL);
1853 
1854 	wpid = wait(&status);
1855 	REQUIRE_EQ(wpid, -1);
1856 	REQUIRE_EQ(errno, ECHILD);
1857 }
1858 #endif /* HAVE_BREAKPOINT */
1859 
1860 /*
1861  * Verify that no more events are reported after PT_KILL except for the
1862  * process exit when stopped inside of a system call.
1863  */
1864 ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_system_call);
1865 ATF_TC_BODY(ptrace__PT_KILL_system_call, tc)
1866 {
1867 	struct ptrace_lwpinfo pl;
1868 	pid_t fpid, wpid;
1869 	int status;
1870 
1871 	ATF_REQUIRE((fpid = fork()) != -1);
1872 	if (fpid == 0) {
1873 		trace_me();
1874 		getpid();
1875 		exit(1);
1876 	}
1877 
1878 	/* The first wait() should report the stop from SIGSTOP. */
1879 	wpid = waitpid(fpid, &status, 0);
1880 	REQUIRE_EQ(wpid, fpid);
1881 	ATF_REQUIRE(WIFSTOPPED(status));
1882 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1883 
1884 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
1885 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
1886 
1887 	/* The second wait() should report a system call entry for getpid(). */
1888 	wpid = waitpid(fpid, &status, 0);
1889 	REQUIRE_EQ(wpid, fpid);
1890 	ATF_REQUIRE(WIFSTOPPED(status));
1891 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1892 
1893 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1894 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
1895 
1896 	/* Kill the child process. */
1897 	REQUIRE_EQ(ptrace(PT_KILL, fpid, 0, 0), 0);
1898 
1899 	/* The last wait() should report the SIGKILL. */
1900 	wpid = waitpid(fpid, &status, 0);
1901 	REQUIRE_EQ(wpid, fpid);
1902 	ATF_REQUIRE(WIFSIGNALED(status));
1903 	REQUIRE_EQ(WTERMSIG(status), SIGKILL);
1904 
1905 	wpid = wait(&status);
1906 	REQUIRE_EQ(wpid, -1);
1907 	REQUIRE_EQ(errno, ECHILD);
1908 }
1909 
1910 /*
1911  * Verify that no more events are reported after PT_KILL except for the
1912  * process exit when killing a multithreaded process.
1913  */
1914 ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_threads);
1915 ATF_TC_BODY(ptrace__PT_KILL_threads, tc)
1916 {
1917 	struct ptrace_lwpinfo pl;
1918 	pid_t fpid, wpid;
1919 	lwpid_t main_lwp;
1920 	int status;
1921 
1922 	ATF_REQUIRE((fpid = fork()) != -1);
1923 	if (fpid == 0) {
1924 		trace_me();
1925 		simple_thread_main();
1926 	}
1927 
1928 	/* The first wait() should report the stop from SIGSTOP. */
1929 	wpid = waitpid(fpid, &status, 0);
1930 	REQUIRE_EQ(wpid, fpid);
1931 	ATF_REQUIRE(WIFSTOPPED(status));
1932 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
1933 
1934 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
1935 	    sizeof(pl)) != -1);
1936 	main_lwp = pl.pl_lwpid;
1937 
1938 	REQUIRE_EQ(ptrace(PT_LWP_EVENTS, wpid, NULL, 1), 0);
1939 
1940 	/* Continue the child ignoring the SIGSTOP. */
1941 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
1942 
1943 	/* The first event should be for the child thread's birth. */
1944 	wpid = waitpid(fpid, &status, 0);
1945 	REQUIRE_EQ(wpid, fpid);
1946 	ATF_REQUIRE(WIFSTOPPED(status));
1947 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
1948 
1949 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1950 	REQUIRE_EQ((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)),
1951 	    (PL_FLAG_BORN | PL_FLAG_SCX));
1952 	ATF_REQUIRE(pl.pl_lwpid != main_lwp);
1953 
1954 	/* Kill the child process. */
1955 	REQUIRE_EQ(ptrace(PT_KILL, fpid, 0, 0), 0);
1956 
1957 	/* The last wait() should report the SIGKILL. */
1958 	wpid = waitpid(fpid, &status, 0);
1959 	REQUIRE_EQ(wpid, fpid);
1960 	ATF_REQUIRE(WIFSIGNALED(status));
1961 	REQUIRE_EQ(WTERMSIG(status), SIGKILL);
1962 
1963 	wpid = wait(&status);
1964 	REQUIRE_EQ(wpid, -1);
1965 	REQUIRE_EQ(errno, ECHILD);
1966 }
1967 
1968 static void *
1969 mask_usr1_thread(void *arg)
1970 {
1971 	pthread_barrier_t *pbarrier;
1972 	sigset_t sigmask;
1973 
1974 	pbarrier = (pthread_barrier_t*)arg;
1975 
1976 	sigemptyset(&sigmask);
1977 	sigaddset(&sigmask, SIGUSR1);
1978 	CHILD_REQUIRE_EQ(pthread_sigmask(SIG_BLOCK, &sigmask, NULL), 0);
1979 
1980 	/* Sync up with other thread after sigmask updated. */
1981 	pthread_barrier_wait(pbarrier);
1982 
1983 	for (;;)
1984 		sleep(60);
1985 
1986 	return (NULL);
1987 }
1988 
1989 /*
1990  * Verify that the SIGKILL from PT_KILL takes priority over other signals
1991  * and prevents spurious stops due to those other signals.
1992  */
1993 ATF_TC(ptrace__PT_KILL_competing_signal);
1994 ATF_TC_HEAD(ptrace__PT_KILL_competing_signal, tc)
1995 {
1996 
1997 	atf_tc_set_md_var(tc, "require.user", "root");
1998 }
1999 ATF_TC_BODY(ptrace__PT_KILL_competing_signal, tc)
2000 {
2001 	pid_t fpid, wpid;
2002 	int status;
2003 	cpuset_t setmask;
2004 	pthread_t t;
2005 	pthread_barrier_t barrier;
2006 	struct sched_param sched_param;
2007 
2008 	ATF_REQUIRE((fpid = fork()) != -1);
2009 	if (fpid == 0) {
2010 		/* Bind to one CPU so only one thread at a time will run. */
2011 		CPU_ZERO(&setmask);
2012 		CPU_SET(0, &setmask);
2013 		cpusetid_t setid;
2014 		CHILD_REQUIRE_EQ(cpuset(&setid), 0);
2015 		CHILD_REQUIRE(cpuset_setaffinity(CPU_LEVEL_CPUSET,
2016 		    CPU_WHICH_CPUSET, setid, sizeof(setmask), &setmask) == 0);
2017 
2018 		CHILD_REQUIRE_EQ(pthread_barrier_init(&barrier, NULL, 2), 0);
2019 
2020 		CHILD_REQUIRE(pthread_create(&t, NULL, mask_usr1_thread,
2021 		    (void*)&barrier) == 0);
2022 
2023 		/*
2024 		 * Give the main thread higher priority. The test always
2025 		 * assumes that, if both threads are able to run, the main
2026 		 * thread runs first.
2027 		 */
2028 		sched_param.sched_priority =
2029 		    (sched_get_priority_max(SCHED_FIFO) +
2030 		    sched_get_priority_min(SCHED_FIFO)) / 2;
2031 		CHILD_REQUIRE(pthread_setschedparam(pthread_self(),
2032 		    SCHED_FIFO, &sched_param) == 0);
2033 		sched_param.sched_priority -= RQ_PPQ;
2034 		CHILD_REQUIRE(pthread_setschedparam(t, SCHED_FIFO,
2035 		    &sched_param) == 0);
2036 
2037 		sigset_t sigmask;
2038 		sigemptyset(&sigmask);
2039 		sigaddset(&sigmask, SIGUSR2);
2040 		CHILD_REQUIRE_EQ(pthread_sigmask(SIG_BLOCK, &sigmask, NULL), 0);
2041 
2042 		/* Sync up with other thread after sigmask updated. */
2043 		pthread_barrier_wait(&barrier);
2044 
2045 		trace_me();
2046 
2047 		for (;;)
2048 			sleep(60);
2049 
2050 		exit(1);
2051 	}
2052 
2053 	/* The first wait() should report the stop from SIGSTOP. */
2054 	wpid = waitpid(fpid, &status, 0);
2055 	REQUIRE_EQ(wpid, fpid);
2056 	ATF_REQUIRE(WIFSTOPPED(status));
2057 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2058 
2059 	/* Continue the child ignoring the SIGSTOP. */
2060 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2061 
2062 	/* Send a signal that only the second thread can handle. */
2063 	REQUIRE_EQ(kill(fpid, SIGUSR2), 0);
2064 
2065 	/* The second wait() should report the SIGUSR2. */
2066 	wpid = waitpid(fpid, &status, 0);
2067 	REQUIRE_EQ(wpid, fpid);
2068 	ATF_REQUIRE(WIFSTOPPED(status));
2069 	REQUIRE_EQ(WSTOPSIG(status), SIGUSR2);
2070 
2071 	/* Send a signal that only the first thread can handle. */
2072 	REQUIRE_EQ(kill(fpid, SIGUSR1), 0);
2073 
2074 	/* Replace the SIGUSR2 with a kill. */
2075 	REQUIRE_EQ(ptrace(PT_KILL, fpid, 0, 0), 0);
2076 
2077 	/* The last wait() should report the SIGKILL (not the SIGUSR signal). */
2078 	wpid = waitpid(fpid, &status, 0);
2079 	REQUIRE_EQ(wpid, fpid);
2080 	ATF_REQUIRE(WIFSIGNALED(status));
2081 	REQUIRE_EQ(WTERMSIG(status), SIGKILL);
2082 
2083 	wpid = wait(&status);
2084 	REQUIRE_EQ(wpid, -1);
2085 	REQUIRE_EQ(errno, ECHILD);
2086 }
2087 
2088 /*
2089  * Verify that the SIGKILL from PT_KILL takes priority over other stop events
2090  * and prevents spurious stops caused by those events.
2091  */
2092 ATF_TC(ptrace__PT_KILL_competing_stop);
2093 ATF_TC_HEAD(ptrace__PT_KILL_competing_stop, tc)
2094 {
2095 
2096 	atf_tc_set_md_var(tc, "require.user", "root");
2097 }
2098 ATF_TC_BODY(ptrace__PT_KILL_competing_stop, tc)
2099 {
2100 	pid_t fpid, wpid;
2101 	int status;
2102 	cpuset_t setmask;
2103 	pthread_t t;
2104 	pthread_barrier_t barrier;
2105 	lwpid_t main_lwp;
2106 	struct ptrace_lwpinfo pl;
2107 	struct sched_param sched_param;
2108 
2109 	ATF_REQUIRE((fpid = fork()) != -1);
2110 	if (fpid == 0) {
2111 		trace_me();
2112 
2113 		/* Bind to one CPU so only one thread at a time will run. */
2114 		CPU_ZERO(&setmask);
2115 		CPU_SET(0, &setmask);
2116 		cpusetid_t setid;
2117 		CHILD_REQUIRE_EQ(cpuset(&setid), 0);
2118 		CHILD_REQUIRE(cpuset_setaffinity(CPU_LEVEL_CPUSET,
2119 		    CPU_WHICH_CPUSET, setid, sizeof(setmask), &setmask) == 0);
2120 
2121 		CHILD_REQUIRE_EQ(pthread_barrier_init(&barrier, NULL, 2), 0);
2122 
2123 		CHILD_REQUIRE(pthread_create(&t, NULL, mask_usr1_thread,
2124 		    (void*)&barrier) == 0);
2125 
2126 		/*
2127 		 * Give the main thread higher priority. The test always
2128 		 * assumes that, if both threads are able to run, the main
2129 		 * thread runs first.
2130 		 */
2131 		sched_param.sched_priority =
2132 		    (sched_get_priority_max(SCHED_FIFO) +
2133 		    sched_get_priority_min(SCHED_FIFO)) / 2;
2134 		CHILD_REQUIRE(pthread_setschedparam(pthread_self(),
2135 		    SCHED_FIFO, &sched_param) == 0);
2136 		sched_param.sched_priority -= RQ_PPQ;
2137 		CHILD_REQUIRE(pthread_setschedparam(t, SCHED_FIFO,
2138 		    &sched_param) == 0);
2139 
2140 		sigset_t sigmask;
2141 		sigemptyset(&sigmask);
2142 		sigaddset(&sigmask, SIGUSR2);
2143 		CHILD_REQUIRE_EQ(pthread_sigmask(SIG_BLOCK, &sigmask, NULL), 0);
2144 
2145 		/* Sync up with other thread after sigmask updated. */
2146 		pthread_barrier_wait(&barrier);
2147 
2148 		/* Sync up with the test before doing the getpid(). */
2149 		raise(SIGSTOP);
2150 
2151 		getpid();
2152 		exit(1);
2153 	}
2154 
2155 	/* The first wait() should report the stop from SIGSTOP. */
2156 	wpid = waitpid(fpid, &status, 0);
2157 	REQUIRE_EQ(wpid, fpid);
2158 	ATF_REQUIRE(WIFSTOPPED(status));
2159 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2160 
2161 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2162 	main_lwp = pl.pl_lwpid;
2163 
2164 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
2165 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
2166 
2167 	/*
2168 	 * Continue until child is done with setup, which is indicated with
2169 	 * SIGSTOP. Ignore system calls in the meantime.
2170 	 */
2171 	for (;;) {
2172 		wpid = waitpid(fpid, &status, 0);
2173 		REQUIRE_EQ(wpid, fpid);
2174 		ATF_REQUIRE(WIFSTOPPED(status));
2175 		if (WSTOPSIG(status) == SIGTRAP) {
2176 			ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
2177 			    sizeof(pl)) != -1);
2178 			ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX));
2179 		} else {
2180 			REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2181 			break;
2182 		}
2183 		REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
2184 	}
2185 
2186 	/* Proceed, allowing main thread to hit syscall entry for getpid(). */
2187 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
2188 
2189 	wpid = waitpid(fpid, &status, 0);
2190 	REQUIRE_EQ(wpid, fpid);
2191 	ATF_REQUIRE(WIFSTOPPED(status));
2192 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
2193 
2194 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
2195 	    sizeof(pl)) != -1);
2196 	REQUIRE_EQ(pl.pl_lwpid, main_lwp);
2197 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
2198 	/* Prevent the main thread from hitting its syscall exit for now. */
2199 	REQUIRE_EQ(ptrace(PT_SUSPEND, main_lwp, 0, 0), 0);
2200 
2201 	/*
2202 	 * Proceed, allowing second thread to hit syscall exit for
2203 	 * pthread_barrier_wait().
2204 	 */
2205 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
2206 
2207 	wpid = waitpid(fpid, &status, 0);
2208 	REQUIRE_EQ(wpid, fpid);
2209 	ATF_REQUIRE(WIFSTOPPED(status));
2210 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
2211 
2212 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
2213 	    sizeof(pl)) != -1);
2214 	ATF_REQUIRE(pl.pl_lwpid != main_lwp);
2215 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
2216 
2217 	/* Send a signal that only the second thread can handle. */
2218 	REQUIRE_EQ(kill(fpid, SIGUSR2), 0);
2219 
2220 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
2221 
2222 	/* The next wait() should report the SIGUSR2. */
2223 	wpid = waitpid(fpid, &status, 0);
2224 	REQUIRE_EQ(wpid, fpid);
2225 	ATF_REQUIRE(WIFSTOPPED(status));
2226 	REQUIRE_EQ(WSTOPSIG(status), SIGUSR2);
2227 
2228 	/* Allow the main thread to try to finish its system call. */
2229 	REQUIRE_EQ(ptrace(PT_RESUME, main_lwp, 0, 0), 0);
2230 
2231 	/*
2232 	 * At this point, the main thread is in the middle of a system call and
2233 	 * has been resumed. The second thread has taken a SIGUSR2 which will
2234 	 * be replaced with a SIGKILL below. The main thread will get to run
2235 	 * first. It should notice the kill request (even though the signal
2236 	 * replacement occurred in the other thread) and exit accordingly.  It
2237 	 * should not stop for the system call exit event.
2238 	 */
2239 
2240 	/* Replace the SIGUSR2 with a kill. */
2241 	REQUIRE_EQ(ptrace(PT_KILL, fpid, 0, 0), 0);
2242 
2243 	/* The last wait() should report the SIGKILL (not a syscall exit). */
2244 	wpid = waitpid(fpid, &status, 0);
2245 	REQUIRE_EQ(wpid, fpid);
2246 	ATF_REQUIRE(WIFSIGNALED(status));
2247 	REQUIRE_EQ(WTERMSIG(status), SIGKILL);
2248 
2249 	wpid = wait(&status);
2250 	REQUIRE_EQ(wpid, -1);
2251 	REQUIRE_EQ(errno, ECHILD);
2252 }
2253 
2254 static void
2255 sigusr1_handler(int sig)
2256 {
2257 
2258 	CHILD_REQUIRE_EQ(sig, SIGUSR1);
2259 	_exit(2);
2260 }
2261 
2262 /*
2263  * Verify that even if the signal queue is full for a child process,
2264  * a PT_KILL will kill the process.
2265  */
2266 ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_with_signal_full_sigqueue);
2267 ATF_TC_BODY(ptrace__PT_KILL_with_signal_full_sigqueue, tc)
2268 {
2269 	pid_t fpid, wpid;
2270 	int status;
2271 	int max_pending_per_proc;
2272 	size_t len;
2273 	int i;
2274 
2275 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_handler) != SIG_ERR);
2276 
2277 	ATF_REQUIRE((fpid = fork()) != -1);
2278 	if (fpid == 0) {
2279 		trace_me();
2280 		exit(1);
2281 	}
2282 
2283 	/* The first wait() should report the stop from SIGSTOP. */
2284 	wpid = waitpid(fpid, &status, 0);
2285 	REQUIRE_EQ(wpid, fpid);
2286 	ATF_REQUIRE(WIFSTOPPED(status));
2287 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2288 
2289 	len = sizeof(max_pending_per_proc);
2290 	ATF_REQUIRE(sysctlbyname("kern.sigqueue.max_pending_per_proc",
2291 	    &max_pending_per_proc, &len, NULL, 0) == 0);
2292 
2293 	/* Fill the signal queue. */
2294 	for (i = 0; i < max_pending_per_proc; ++i)
2295 		REQUIRE_EQ(kill(fpid, SIGUSR1), 0);
2296 
2297 	/* Kill the child process. */
2298 	REQUIRE_EQ(ptrace(PT_KILL, fpid, 0, 0), 0);
2299 
2300 	/* The last wait() should report the SIGKILL. */
2301 	wpid = waitpid(fpid, &status, 0);
2302 	REQUIRE_EQ(wpid, fpid);
2303 	ATF_REQUIRE(WIFSIGNALED(status));
2304 	REQUIRE_EQ(WTERMSIG(status), SIGKILL);
2305 
2306 	wpid = wait(&status);
2307 	REQUIRE_EQ(wpid, -1);
2308 	REQUIRE_EQ(errno, ECHILD);
2309 }
2310 
2311 /*
2312  * Verify that when stopped at a system call entry, a signal can be
2313  * requested with PT_CONTINUE which will be delivered once the system
2314  * call is complete.
2315  */
2316 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_system_call_entry);
2317 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_system_call_entry, tc)
2318 {
2319 	struct ptrace_lwpinfo pl;
2320 	pid_t fpid, wpid;
2321 	int status;
2322 
2323 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_handler) != SIG_ERR);
2324 
2325 	ATF_REQUIRE((fpid = fork()) != -1);
2326 	if (fpid == 0) {
2327 		trace_me();
2328 		getpid();
2329 		exit(1);
2330 	}
2331 
2332 	/* The first wait() should report the stop from SIGSTOP. */
2333 	wpid = waitpid(fpid, &status, 0);
2334 	REQUIRE_EQ(wpid, fpid);
2335 	ATF_REQUIRE(WIFSTOPPED(status));
2336 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2337 
2338 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
2339 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
2340 
2341 	/* The second wait() should report a system call entry for getpid(). */
2342 	wpid = waitpid(fpid, &status, 0);
2343 	REQUIRE_EQ(wpid, fpid);
2344 	ATF_REQUIRE(WIFSTOPPED(status));
2345 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
2346 
2347 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2348 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
2349 
2350 	/* Continue the child process with a signal. */
2351 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
2352 
2353 	for (;;) {
2354 		/*
2355 		 * The last wait() should report exit 2, i.e., a normal _exit
2356 		 * from the signal handler. In the meantime, catch and proceed
2357 		 * past any syscall stops.
2358 		 */
2359 		wpid = waitpid(fpid, &status, 0);
2360 		REQUIRE_EQ(wpid, fpid);
2361 		if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) {
2362 			ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2363 			ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX));
2364 			REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2365 		} else {
2366 			ATF_REQUIRE(WIFEXITED(status));
2367 			REQUIRE_EQ(WEXITSTATUS(status), 2);
2368 			break;
2369 		}
2370 	}
2371 
2372 	wpid = wait(&status);
2373 	REQUIRE_EQ(wpid, -1);
2374 	REQUIRE_EQ(errno, ECHILD);
2375 }
2376 
2377 static void
2378 sigusr1_counting_handler(int sig)
2379 {
2380 	static int counter = 0;
2381 
2382 	CHILD_REQUIRE_EQ(sig, SIGUSR1);
2383 	counter++;
2384 	if (counter == 2)
2385 		_exit(2);
2386 }
2387 
2388 /*
2389  * Verify that, when continuing from a stop at system call entry and exit,
2390  * a signal can be requested from both stops, and both will be delivered when
2391  * the system call is complete.
2392  */
2393 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_system_call_entry_and_exit);
2394 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_system_call_entry_and_exit, tc)
2395 {
2396 	struct ptrace_lwpinfo pl;
2397 	pid_t fpid, wpid;
2398 	int status;
2399 
2400 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_counting_handler) != SIG_ERR);
2401 
2402 	ATF_REQUIRE((fpid = fork()) != -1);
2403 	if (fpid == 0) {
2404 		trace_me();
2405 		getpid();
2406 		exit(1);
2407 	}
2408 
2409 	/* The first wait() should report the stop from SIGSTOP. */
2410 	wpid = waitpid(fpid, &status, 0);
2411 	REQUIRE_EQ(wpid, fpid);
2412 	ATF_REQUIRE(WIFSTOPPED(status));
2413 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2414 
2415 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
2416 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
2417 
2418 	/* The second wait() should report a system call entry for getpid(). */
2419 	wpid = waitpid(fpid, &status, 0);
2420 	REQUIRE_EQ(wpid, fpid);
2421 	ATF_REQUIRE(WIFSTOPPED(status));
2422 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
2423 
2424 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2425 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
2426 
2427 	/* Continue the child process with a signal. */
2428 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
2429 
2430 	/* The third wait() should report a system call exit for getpid(). */
2431 	wpid = waitpid(fpid, &status, 0);
2432 	REQUIRE_EQ(wpid, fpid);
2433 	ATF_REQUIRE(WIFSTOPPED(status));
2434 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
2435 
2436 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2437 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
2438 
2439 	/* Continue the child process with a signal. */
2440 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
2441 
2442 	for (;;) {
2443 		/*
2444 		 * The last wait() should report exit 2, i.e., a normal _exit
2445 		 * from the signal handler. In the meantime, catch and proceed
2446 		 * past any syscall stops.
2447 		 */
2448 		wpid = waitpid(fpid, &status, 0);
2449 		REQUIRE_EQ(wpid, fpid);
2450 		if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) {
2451 			ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2452 			ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX));
2453 			REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2454 		} else {
2455 			ATF_REQUIRE(WIFEXITED(status));
2456 			REQUIRE_EQ(WEXITSTATUS(status), 2);
2457 			break;
2458 		}
2459 	}
2460 
2461 	wpid = wait(&status);
2462 	REQUIRE_EQ(wpid, -1);
2463 	REQUIRE_EQ(errno, ECHILD);
2464 }
2465 
2466 /*
2467  * Verify that even if the signal queue is full for a child process,
2468  * a PT_CONTINUE with a signal will not result in loss of that signal.
2469  */
2470 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_full_sigqueue);
2471 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_full_sigqueue, tc)
2472 {
2473 	pid_t fpid, wpid;
2474 	int status;
2475 	int max_pending_per_proc;
2476 	size_t len;
2477 	int i;
2478 
2479 	ATF_REQUIRE(signal(SIGUSR2, handler) != SIG_ERR);
2480 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_handler) != SIG_ERR);
2481 
2482 	ATF_REQUIRE((fpid = fork()) != -1);
2483 	if (fpid == 0) {
2484 		trace_me();
2485 		exit(1);
2486 	}
2487 
2488 	/* The first wait() should report the stop from SIGSTOP. */
2489 	wpid = waitpid(fpid, &status, 0);
2490 	REQUIRE_EQ(wpid, fpid);
2491 	ATF_REQUIRE(WIFSTOPPED(status));
2492 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2493 
2494 	len = sizeof(max_pending_per_proc);
2495 	ATF_REQUIRE(sysctlbyname("kern.sigqueue.max_pending_per_proc",
2496 	    &max_pending_per_proc, &len, NULL, 0) == 0);
2497 
2498 	/* Fill the signal queue. */
2499 	for (i = 0; i < max_pending_per_proc; ++i)
2500 		REQUIRE_EQ(kill(fpid, SIGUSR2), 0);
2501 
2502 	/* Continue with signal. */
2503 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
2504 
2505 	for (;;) {
2506 		wpid = waitpid(fpid, &status, 0);
2507 		REQUIRE_EQ(wpid, fpid);
2508 		if (WIFSTOPPED(status)) {
2509 			REQUIRE_EQ(WSTOPSIG(status), SIGUSR2);
2510 			REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2511 		} else {
2512 			/*
2513 			 * The last wait() should report normal _exit from the
2514 			 * SIGUSR1 handler.
2515 			 */
2516 			ATF_REQUIRE(WIFEXITED(status));
2517 			REQUIRE_EQ(WEXITSTATUS(status), 2);
2518 			break;
2519 		}
2520 	}
2521 
2522 	wpid = wait(&status);
2523 	REQUIRE_EQ(wpid, -1);
2524 	REQUIRE_EQ(errno, ECHILD);
2525 }
2526 
2527 static sem_t sigusr1_sem;
2528 static int got_usr1;
2529 
2530 static void
2531 sigusr1_sempost_handler(int sig __unused)
2532 {
2533 
2534 	got_usr1++;
2535 	CHILD_REQUIRE_EQ(sem_post(&sigusr1_sem), 0);
2536 }
2537 
2538 /*
2539  * Verify that even if the signal queue is full for a child process,
2540  * and the signal is masked, a PT_CONTINUE with a signal will not
2541  * result in loss of that signal.
2542  */
2543 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_masked_full_sigqueue);
2544 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_masked_full_sigqueue, tc)
2545 {
2546 	struct ptrace_lwpinfo pl;
2547 	pid_t fpid, wpid;
2548 	int status, err;
2549 	int max_pending_per_proc;
2550 	size_t len;
2551 	int i;
2552 	sigset_t sigmask;
2553 
2554 	ATF_REQUIRE(signal(SIGUSR2, handler) != SIG_ERR);
2555 	REQUIRE_EQ(sem_init(&sigusr1_sem, 0, 0), 0);
2556 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_sempost_handler) != SIG_ERR);
2557 
2558 	got_usr1 = 0;
2559 	ATF_REQUIRE((fpid = fork()) != -1);
2560 	if (fpid == 0) {
2561 		CHILD_REQUIRE_EQ(sigemptyset(&sigmask), 0);
2562 		CHILD_REQUIRE_EQ(sigaddset(&sigmask, SIGUSR1), 0);
2563 		CHILD_REQUIRE_EQ(sigprocmask(SIG_BLOCK, &sigmask, NULL), 0);
2564 
2565 		trace_me();
2566 		CHILD_REQUIRE_EQ(got_usr1, 0);
2567 
2568 		/* Allow the pending SIGUSR1 in now. */
2569 		CHILD_REQUIRE_EQ(sigprocmask(SIG_UNBLOCK, &sigmask, NULL), 0);
2570 		/* Wait to receive the SIGUSR1. */
2571 		do {
2572 			err = sem_wait(&sigusr1_sem);
2573 			CHILD_REQUIRE(err == 0 || errno == EINTR);
2574 		} while (err != 0 && errno == EINTR);
2575 		CHILD_REQUIRE_EQ(got_usr1, 1);
2576 		exit(1);
2577 	}
2578 
2579 	/* The first wait() should report the stop from SIGSTOP. */
2580 	wpid = waitpid(fpid, &status, 0);
2581 	REQUIRE_EQ(wpid, fpid);
2582 	ATF_REQUIRE(WIFSTOPPED(status));
2583 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2584 
2585 	len = sizeof(max_pending_per_proc);
2586 	ATF_REQUIRE(sysctlbyname("kern.sigqueue.max_pending_per_proc",
2587 	    &max_pending_per_proc, &len, NULL, 0) == 0);
2588 
2589 	/* Fill the signal queue. */
2590 	for (i = 0; i < max_pending_per_proc; ++i)
2591 		REQUIRE_EQ(kill(fpid, SIGUSR2), 0);
2592 
2593 	/* Continue with signal. */
2594 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
2595 
2596 	/* Collect and ignore all of the SIGUSR2. */
2597 	for (i = 0; i < max_pending_per_proc; ++i) {
2598 		wpid = waitpid(fpid, &status, 0);
2599 		REQUIRE_EQ(wpid, fpid);
2600 		ATF_REQUIRE(WIFSTOPPED(status));
2601 		REQUIRE_EQ(WSTOPSIG(status), SIGUSR2);
2602 		REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2603 	}
2604 
2605 	/* Now our PT_CONTINUE'd SIGUSR1 should cause a stop after unmask. */
2606 	wpid = waitpid(fpid, &status, 0);
2607 	REQUIRE_EQ(wpid, fpid);
2608 	ATF_REQUIRE(WIFSTOPPED(status));
2609 	REQUIRE_EQ(WSTOPSIG(status), SIGUSR1);
2610 	ATF_REQUIRE(ptrace(PT_LWPINFO, fpid, (caddr_t)&pl, sizeof(pl)) != -1);
2611 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGUSR1);
2612 
2613 	/* Continue the child, ignoring the SIGUSR1. */
2614 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2615 
2616 	/* The last wait() should report exit after receiving SIGUSR1. */
2617 	wpid = waitpid(fpid, &status, 0);
2618 	REQUIRE_EQ(wpid, fpid);
2619 	ATF_REQUIRE(WIFEXITED(status));
2620 	REQUIRE_EQ(WEXITSTATUS(status), 1);
2621 
2622 	wpid = wait(&status);
2623 	REQUIRE_EQ(wpid, -1);
2624 	REQUIRE_EQ(errno, ECHILD);
2625 }
2626 
2627 /*
2628  * Verify that, after stopping due to a signal, that signal can be
2629  * replaced with another signal.
2630  */
2631 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_change_sig);
2632 ATF_TC_BODY(ptrace__PT_CONTINUE_change_sig, tc)
2633 {
2634 	struct ptrace_lwpinfo pl;
2635 	pid_t fpid, wpid;
2636 	int status;
2637 
2638 	ATF_REQUIRE((fpid = fork()) != -1);
2639 	if (fpid == 0) {
2640 		trace_me();
2641 		sleep(20);
2642 		exit(1);
2643 	}
2644 
2645 	/* The first wait() should report the stop from SIGSTOP. */
2646 	wpid = waitpid(fpid, &status, 0);
2647 	REQUIRE_EQ(wpid, fpid);
2648 	ATF_REQUIRE(WIFSTOPPED(status));
2649 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2650 
2651 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2652 
2653 	/* Send a signal without ptrace. */
2654 	REQUIRE_EQ(kill(fpid, SIGINT), 0);
2655 
2656 	/* The second wait() should report a SIGINT was received. */
2657 	wpid = waitpid(fpid, &status, 0);
2658 	REQUIRE_EQ(wpid, fpid);
2659 	ATF_REQUIRE(WIFSTOPPED(status));
2660 	REQUIRE_EQ(WSTOPSIG(status), SIGINT);
2661 
2662 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2663 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
2664 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGINT);
2665 
2666 	/* Continue the child process with a different signal. */
2667 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGTERM), 0);
2668 
2669 	/*
2670 	 * The last wait() should report having died due to the new
2671 	 * signal, SIGTERM.
2672 	 */
2673 	wpid = waitpid(fpid, &status, 0);
2674 	REQUIRE_EQ(wpid, fpid);
2675 	ATF_REQUIRE(WIFSIGNALED(status));
2676 	REQUIRE_EQ(WTERMSIG(status), SIGTERM);
2677 
2678 	wpid = wait(&status);
2679 	REQUIRE_EQ(wpid, -1);
2680 	REQUIRE_EQ(errno, ECHILD);
2681 }
2682 
2683 /*
2684  * Verify that a signal can be passed through to the child even when there
2685  * was no true signal originally. Such cases arise when a SIGTRAP is
2686  * invented for e.g, system call stops.
2687  */
2688 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_sigtrap_system_call_entry);
2689 ATF_TC_BODY(ptrace__PT_CONTINUE_with_sigtrap_system_call_entry, tc)
2690 {
2691 	struct ptrace_lwpinfo pl;
2692 	struct rlimit rl;
2693 	pid_t fpid, wpid;
2694 	int status;
2695 
2696 	ATF_REQUIRE((fpid = fork()) != -1);
2697 	if (fpid == 0) {
2698 		trace_me();
2699 		/* SIGTRAP expected to cause exit on syscall entry. */
2700 		rl.rlim_cur = rl.rlim_max = 0;
2701 		REQUIRE_EQ(setrlimit(RLIMIT_CORE, &rl), 0);
2702 		getpid();
2703 		exit(1);
2704 	}
2705 
2706 	/* The first wait() should report the stop from SIGSTOP. */
2707 	wpid = waitpid(fpid, &status, 0);
2708 	REQUIRE_EQ(wpid, fpid);
2709 	ATF_REQUIRE(WIFSTOPPED(status));
2710 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2711 
2712 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
2713 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
2714 
2715 	/* The second wait() should report a system call entry for getpid(). */
2716 	wpid = waitpid(fpid, &status, 0);
2717 	REQUIRE_EQ(wpid, fpid);
2718 	ATF_REQUIRE(WIFSTOPPED(status));
2719 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
2720 
2721 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2722 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
2723 
2724 	/* Continue the child process with a SIGTRAP. */
2725 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGTRAP), 0);
2726 
2727 	for (;;) {
2728 		/*
2729 		 * The last wait() should report exit due to SIGTRAP.  In the
2730 		 * meantime, catch and proceed past any syscall stops.
2731 		 */
2732 		wpid = waitpid(fpid, &status, 0);
2733 		REQUIRE_EQ(wpid, fpid);
2734 		if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) {
2735 			ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2736 			ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX));
2737 			REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2738 		} else {
2739 			ATF_REQUIRE(WIFSIGNALED(status));
2740 			REQUIRE_EQ(WTERMSIG(status), SIGTRAP);
2741 			break;
2742 		}
2743 	}
2744 
2745 	wpid = wait(&status);
2746 	REQUIRE_EQ(wpid, -1);
2747 	REQUIRE_EQ(errno, ECHILD);
2748 }
2749 
2750 /*
2751  * A mixed bag PT_CONTINUE with signal test.
2752  */
2753 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_mix);
2754 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_mix, tc)
2755 {
2756 	struct ptrace_lwpinfo pl;
2757 	pid_t fpid, wpid;
2758 	int status;
2759 
2760 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_counting_handler) != SIG_ERR);
2761 
2762 	ATF_REQUIRE((fpid = fork()) != -1);
2763 	if (fpid == 0) {
2764 		trace_me();
2765 		getpid();
2766 		exit(1);
2767 	}
2768 
2769 	/* The first wait() should report the stop from SIGSTOP. */
2770 	wpid = waitpid(fpid, &status, 0);
2771 	REQUIRE_EQ(wpid, fpid);
2772 	ATF_REQUIRE(WIFSTOPPED(status));
2773 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2774 
2775 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
2776 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
2777 
2778 	/* The second wait() should report a system call entry for getpid(). */
2779 	wpid = waitpid(fpid, &status, 0);
2780 	REQUIRE_EQ(wpid, fpid);
2781 	ATF_REQUIRE(WIFSTOPPED(status));
2782 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
2783 
2784 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2785 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
2786 
2787 	/* Continue with the first SIGUSR1. */
2788 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
2789 
2790 	/* The next wait() should report a system call exit for getpid(). */
2791 	wpid = waitpid(fpid, &status, 0);
2792 	REQUIRE_EQ(wpid, fpid);
2793 	ATF_REQUIRE(WIFSTOPPED(status));
2794 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
2795 
2796 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2797 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
2798 
2799 	/* Send an ABRT without ptrace. */
2800 	REQUIRE_EQ(kill(fpid, SIGABRT), 0);
2801 
2802 	/* Continue normally. */
2803 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2804 
2805 	/* The next wait() should report the SIGABRT. */
2806 	wpid = waitpid(fpid, &status, 0);
2807 	REQUIRE_EQ(wpid, fpid);
2808 	ATF_REQUIRE(WIFSTOPPED(status));
2809 	REQUIRE_EQ(WSTOPSIG(status), SIGABRT);
2810 
2811 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2812 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
2813 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGABRT);
2814 
2815 	/* Continue, replacing the SIGABRT with another SIGUSR1. */
2816 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
2817 
2818 	for (;;) {
2819 		/*
2820 		 * The last wait() should report exit 2, i.e., a normal _exit
2821 		 * from the signal handler. In the meantime, catch and proceed
2822 		 * past any syscall stops.
2823 		 */
2824 		wpid = waitpid(fpid, &status, 0);
2825 		REQUIRE_EQ(wpid, fpid);
2826 		if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) {
2827 			ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2828 			ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX));
2829 			REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2830 		} else {
2831 			ATF_REQUIRE(WIFEXITED(status));
2832 			REQUIRE_EQ(WEXITSTATUS(status), 2);
2833 			break;
2834 		}
2835 	}
2836 
2837 	wpid = wait(&status);
2838 	REQUIRE_EQ(wpid, -1);
2839 	REQUIRE_EQ(errno, ECHILD);
2840 }
2841 
2842 /*
2843  * Verify a signal delivered by ptrace is noticed by kevent(2).
2844  */
2845 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_kqueue);
2846 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_kqueue, tc)
2847 {
2848 	pid_t fpid, wpid;
2849 	int status, kq, nevents;
2850 	struct kevent kev;
2851 
2852 	ATF_REQUIRE(signal(SIGUSR1, SIG_IGN) != SIG_ERR);
2853 
2854 	ATF_REQUIRE((fpid = fork()) != -1);
2855 	if (fpid == 0) {
2856 		CHILD_REQUIRE((kq = kqueue()) > 0);
2857 		EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_ADD, 0, 0, 0);
2858 		CHILD_REQUIRE_EQ(kevent(kq, &kev, 1, NULL, 0, NULL), 0);
2859 
2860 		trace_me();
2861 
2862 		for (;;) {
2863 			nevents = kevent(kq, NULL, 0, &kev, 1, NULL);
2864 			if (nevents == -1 && errno == EINTR)
2865 				continue;
2866 			CHILD_REQUIRE(nevents > 0);
2867 			CHILD_REQUIRE_EQ(kev.filter, EVFILT_SIGNAL);
2868 			CHILD_REQUIRE_EQ(kev.ident, (uintptr_t)SIGUSR1);
2869 			break;
2870 		}
2871 
2872 		exit(1);
2873 	}
2874 
2875 	/* The first wait() should report the stop from SIGSTOP. */
2876 	wpid = waitpid(fpid, &status, 0);
2877 	REQUIRE_EQ(wpid, fpid);
2878 	ATF_REQUIRE(WIFSTOPPED(status));
2879 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2880 
2881 	/* Continue with the SIGUSR1. */
2882 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
2883 
2884 	/*
2885 	 * The last wait() should report normal exit with code 1.
2886 	 */
2887 	wpid = waitpid(fpid, &status, 0);
2888 	REQUIRE_EQ(wpid, fpid);
2889 	ATF_REQUIRE(WIFEXITED(status));
2890 	REQUIRE_EQ(WEXITSTATUS(status), 1);
2891 
2892 	wpid = wait(&status);
2893 	REQUIRE_EQ(wpid, -1);
2894 	REQUIRE_EQ(errno, ECHILD);
2895 }
2896 
2897 static void *
2898 signal_thread(void *arg)
2899 {
2900 	int err;
2901 	sigset_t sigmask;
2902 
2903 	pthread_barrier_t *pbarrier = (pthread_barrier_t*)arg;
2904 
2905 	/* Wait for this thread to receive a SIGUSR1. */
2906 	do {
2907 		err = sem_wait(&sigusr1_sem);
2908 		CHILD_REQUIRE(err == 0 || errno == EINTR);
2909 	} while (err != 0 && errno == EINTR);
2910 
2911 	/* Free our companion thread from the barrier. */
2912 	pthread_barrier_wait(pbarrier);
2913 
2914 	/*
2915 	 * Swap ignore duties; the next SIGUSR1 should go to the
2916 	 * other thread.
2917 	 */
2918 	CHILD_REQUIRE_EQ(sigemptyset(&sigmask), 0);
2919 	CHILD_REQUIRE_EQ(sigaddset(&sigmask, SIGUSR1), 0);
2920 	CHILD_REQUIRE_EQ(pthread_sigmask(SIG_BLOCK, &sigmask, NULL), 0);
2921 
2922 	/* Sync up threads after swapping signal masks. */
2923 	pthread_barrier_wait(pbarrier);
2924 
2925 	/* Wait until our companion has received its SIGUSR1. */
2926 	pthread_barrier_wait(pbarrier);
2927 
2928 	return (NULL);
2929 }
2930 
2931 /*
2932  * Verify that a traced process with blocked signal received the
2933  * signal from kill() once unmasked.
2934  */
2935 ATF_TC_WITHOUT_HEAD(ptrace__killed_with_sigmask);
2936 ATF_TC_BODY(ptrace__killed_with_sigmask, tc)
2937 {
2938 	struct ptrace_lwpinfo pl;
2939 	pid_t fpid, wpid;
2940 	int status, err;
2941 	sigset_t sigmask;
2942 
2943 	REQUIRE_EQ(sem_init(&sigusr1_sem, 0, 0), 0);
2944 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_sempost_handler) != SIG_ERR);
2945 	got_usr1 = 0;
2946 
2947 	ATF_REQUIRE((fpid = fork()) != -1);
2948 	if (fpid == 0) {
2949 		CHILD_REQUIRE_EQ(sigemptyset(&sigmask), 0);
2950 		CHILD_REQUIRE_EQ(sigaddset(&sigmask, SIGUSR1), 0);
2951 		CHILD_REQUIRE_EQ(sigprocmask(SIG_BLOCK, &sigmask, NULL), 0);
2952 
2953 		trace_me();
2954 		CHILD_REQUIRE_EQ(got_usr1, 0);
2955 
2956 		/* Allow the pending SIGUSR1 in now. */
2957 		CHILD_REQUIRE_EQ(sigprocmask(SIG_UNBLOCK, &sigmask, NULL), 0);
2958 		/* Wait to receive a SIGUSR1. */
2959 		do {
2960 			err = sem_wait(&sigusr1_sem);
2961 			CHILD_REQUIRE(err == 0 || errno == EINTR);
2962 		} while (err != 0 && errno == EINTR);
2963 		CHILD_REQUIRE_EQ(got_usr1, 1);
2964 		exit(1);
2965 	}
2966 
2967 	/* The first wait() should report the stop from SIGSTOP. */
2968 	wpid = waitpid(fpid, &status, 0);
2969 	REQUIRE_EQ(wpid, fpid);
2970 	ATF_REQUIRE(WIFSTOPPED(status));
2971 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
2972 	ATF_REQUIRE(ptrace(PT_LWPINFO, fpid, (caddr_t)&pl, sizeof(pl)) != -1);
2973 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGSTOP);
2974 
2975 	/* Send blocked SIGUSR1 which should cause a stop. */
2976 	REQUIRE_EQ(kill(fpid, SIGUSR1), 0);
2977 
2978 	/* Continue the child ignoring the SIGSTOP. */
2979 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
2980 
2981 	/* The next wait() should report the kill(SIGUSR1) was received. */
2982 	wpid = waitpid(fpid, &status, 0);
2983 	REQUIRE_EQ(wpid, fpid);
2984 	ATF_REQUIRE(WIFSTOPPED(status));
2985 	REQUIRE_EQ(WSTOPSIG(status), SIGUSR1);
2986 	ATF_REQUIRE(ptrace(PT_LWPINFO, fpid, (caddr_t)&pl, sizeof(pl)) != -1);
2987 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGUSR1);
2988 
2989 	/* Continue the child, allowing in the SIGUSR1. */
2990 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
2991 
2992 	/* The last wait() should report normal exit with code 1. */
2993 	wpid = waitpid(fpid, &status, 0);
2994 	REQUIRE_EQ(wpid, fpid);
2995 	ATF_REQUIRE(WIFEXITED(status));
2996 	REQUIRE_EQ(WEXITSTATUS(status), 1);
2997 
2998 	wpid = wait(&status);
2999 	REQUIRE_EQ(wpid, -1);
3000 	REQUIRE_EQ(errno, ECHILD);
3001 }
3002 
3003 /*
3004  * Verify that a traced process with blocked signal received the
3005  * signal from PT_CONTINUE once unmasked.
3006  */
3007 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_sigmask);
3008 ATF_TC_BODY(ptrace__PT_CONTINUE_with_sigmask, tc)
3009 {
3010 	struct ptrace_lwpinfo pl;
3011 	pid_t fpid, wpid;
3012 	int status, err;
3013 	sigset_t sigmask;
3014 
3015 	REQUIRE_EQ(sem_init(&sigusr1_sem, 0, 0), 0);
3016 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_sempost_handler) != SIG_ERR);
3017 	got_usr1 = 0;
3018 
3019 	ATF_REQUIRE((fpid = fork()) != -1);
3020 	if (fpid == 0) {
3021 		CHILD_REQUIRE_EQ(sigemptyset(&sigmask), 0);
3022 		CHILD_REQUIRE_EQ(sigaddset(&sigmask, SIGUSR1), 0);
3023 		CHILD_REQUIRE_EQ(sigprocmask(SIG_BLOCK, &sigmask, NULL), 0);
3024 
3025 		trace_me();
3026 		CHILD_REQUIRE_EQ(got_usr1, 0);
3027 
3028 		/* Allow the pending SIGUSR1 in now. */
3029 		CHILD_REQUIRE_EQ(sigprocmask(SIG_UNBLOCK, &sigmask, NULL), 0);
3030 		/* Wait to receive a SIGUSR1. */
3031 		do {
3032 			err = sem_wait(&sigusr1_sem);
3033 			CHILD_REQUIRE(err == 0 || errno == EINTR);
3034 		} while (err != 0 && errno == EINTR);
3035 
3036 		CHILD_REQUIRE_EQ(got_usr1, 1);
3037 		exit(1);
3038 	}
3039 
3040 	/* The first wait() should report the stop from SIGSTOP. */
3041 	wpid = waitpid(fpid, &status, 0);
3042 	REQUIRE_EQ(wpid, fpid);
3043 	ATF_REQUIRE(WIFSTOPPED(status));
3044 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3045 	ATF_REQUIRE(ptrace(PT_LWPINFO, fpid, (caddr_t)&pl, sizeof(pl)) != -1);
3046 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGSTOP);
3047 
3048 	/* Continue the child replacing SIGSTOP with SIGUSR1. */
3049 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
3050 
3051 	/* The next wait() should report the SIGUSR1 was received. */
3052 	wpid = waitpid(fpid, &status, 0);
3053 	REQUIRE_EQ(wpid, fpid);
3054 	ATF_REQUIRE(WIFSTOPPED(status));
3055 	REQUIRE_EQ(WSTOPSIG(status), SIGUSR1);
3056 	ATF_REQUIRE(ptrace(PT_LWPINFO, fpid, (caddr_t)&pl, sizeof(pl)) != -1);
3057 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGUSR1);
3058 
3059 	/* Continue the child, ignoring the SIGUSR1. */
3060 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3061 
3062 	/* The last wait() should report normal exit with code 1. */
3063 	wpid = waitpid(fpid, &status, 0);
3064 	REQUIRE_EQ(wpid, fpid);
3065 	ATF_REQUIRE(WIFEXITED(status));
3066 	REQUIRE_EQ(WEXITSTATUS(status), 1);
3067 
3068 	wpid = wait(&status);
3069 	REQUIRE_EQ(wpid, -1);
3070 	REQUIRE_EQ(errno, ECHILD);
3071 }
3072 
3073 /*
3074  * Verify that if ptrace stops due to a signal but continues with
3075  * a different signal that the new signal is routed to a thread
3076  * that can accept it, and that the thread is awakened by the signal
3077  * in a timely manner.
3078  */
3079 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_thread_sigmask);
3080 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_thread_sigmask, tc)
3081 {
3082 	pid_t fpid, wpid;
3083 	int status, err;
3084 	pthread_t t;
3085 	sigset_t sigmask;
3086 	pthread_barrier_t barrier;
3087 
3088 	REQUIRE_EQ(pthread_barrier_init(&barrier, NULL, 2), 0);
3089 	REQUIRE_EQ(sem_init(&sigusr1_sem, 0, 0), 0);
3090 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_sempost_handler) != SIG_ERR);
3091 
3092 	ATF_REQUIRE((fpid = fork()) != -1);
3093 	if (fpid == 0) {
3094 		CHILD_REQUIRE_EQ(pthread_create(&t, NULL, signal_thread,
3095 		    (void *)&barrier), 0);
3096 
3097 		/* The other thread should receive the first SIGUSR1. */
3098 		CHILD_REQUIRE_EQ(sigemptyset(&sigmask), 0);
3099 		CHILD_REQUIRE_EQ(sigaddset(&sigmask, SIGUSR1), 0);
3100 		CHILD_REQUIRE_EQ(pthread_sigmask(SIG_BLOCK, &sigmask, NULL), 0);
3101 
3102 		trace_me();
3103 
3104 		/* Wait until other thread has received its SIGUSR1. */
3105 		pthread_barrier_wait(&barrier);
3106 
3107 		/*
3108 		 * Swap ignore duties; the next SIGUSR1 should go to this
3109 		 * thread.
3110 		 */
3111 		CHILD_REQUIRE_EQ(pthread_sigmask(SIG_UNBLOCK, &sigmask, NULL),
3112 		    0);
3113 
3114 		/* Sync up threads after swapping signal masks. */
3115 		pthread_barrier_wait(&barrier);
3116 
3117 		/*
3118 		 * Sync up with test code; we're ready for the next SIGUSR1
3119 		 * now.
3120 		 */
3121 		raise(SIGSTOP);
3122 
3123 		/* Wait for this thread to receive a SIGUSR1. */
3124 		do {
3125 			err = sem_wait(&sigusr1_sem);
3126 			CHILD_REQUIRE(err == 0 || errno == EINTR);
3127 		} while (err != 0 && errno == EINTR);
3128 
3129 		/* Free the other thread from the barrier. */
3130 		pthread_barrier_wait(&barrier);
3131 
3132 		CHILD_REQUIRE_EQ(pthread_join(t, NULL), 0);
3133 
3134 		exit(1);
3135 	}
3136 
3137 	/* The first wait() should report the stop from SIGSTOP. */
3138 	wpid = waitpid(fpid, &status, 0);
3139 	REQUIRE_EQ(wpid, fpid);
3140 	ATF_REQUIRE(WIFSTOPPED(status));
3141 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3142 
3143 	/* Continue the child ignoring the SIGSTOP. */
3144 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3145 
3146 	/*
3147 	 * Send a signal without ptrace that either thread will accept (USR2,
3148 	 * in this case).
3149 	 */
3150 	REQUIRE_EQ(kill(fpid, SIGUSR2), 0);
3151 
3152 	/* The second wait() should report a SIGUSR2 was received. */
3153 	wpid = waitpid(fpid, &status, 0);
3154 	REQUIRE_EQ(wpid, fpid);
3155 	ATF_REQUIRE(WIFSTOPPED(status));
3156 	REQUIRE_EQ(WSTOPSIG(status), SIGUSR2);
3157 
3158 	/* Continue the child, changing the signal to USR1. */
3159 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
3160 
3161 	/* The next wait() should report the stop from SIGSTOP. */
3162 	wpid = waitpid(fpid, &status, 0);
3163 	REQUIRE_EQ(wpid, fpid);
3164 	ATF_REQUIRE(WIFSTOPPED(status));
3165 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3166 
3167 	/* Continue the child ignoring the SIGSTOP. */
3168 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3169 
3170 	REQUIRE_EQ(kill(fpid, SIGUSR2), 0);
3171 
3172 	/* The next wait() should report a SIGUSR2 was received. */
3173 	wpid = waitpid(fpid, &status, 0);
3174 	REQUIRE_EQ(wpid, fpid);
3175 	ATF_REQUIRE(WIFSTOPPED(status));
3176 	REQUIRE_EQ(WSTOPSIG(status), SIGUSR2);
3177 
3178 	/* Continue the child, changing the signal to USR1. */
3179 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1), 0);
3180 
3181 	/* The last wait() should report normal exit with code 1. */
3182 	wpid = waitpid(fpid, &status, 0);
3183 	REQUIRE_EQ(wpid, fpid);
3184 	ATF_REQUIRE(WIFEXITED(status));
3185 	REQUIRE_EQ(WEXITSTATUS(status), 1);
3186 
3187 	wpid = wait(&status);
3188 	REQUIRE_EQ(wpid, -1);
3189 	REQUIRE_EQ(errno, ECHILD);
3190 }
3191 
3192 /*
3193  * Verify that PT_GETREGSET returns registers and PT_SETREGSET updates them.
3194  */
3195 ATF_TC_WITHOUT_HEAD(ptrace__PT_REGSET);
3196 ATF_TC_BODY(ptrace__PT_REGSET, tc)
3197 {
3198 #if defined(__aarch64__)
3199 	struct arm64_addr_mask addr_mask;
3200 #endif
3201 	struct prstatus prstatus;
3202 	struct iovec vec;
3203 	pid_t child, wpid;
3204 	int status;
3205 
3206 	ATF_REQUIRE((child = fork()) != -1);
3207 	if (child == 0) {
3208 		trace_me();
3209 		exit(1);
3210 	}
3211 
3212 	/* The first wait() should report the stop from SIGSTOP. */
3213 	wpid = waitpid(child, &status, 0);
3214 	REQUIRE_EQ(wpid, child);
3215 	ATF_REQUIRE(WIFSTOPPED(status));
3216 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3217 
3218 	/* Check the size is returned when vec.iov_base is NULL */
3219 	vec.iov_base = NULL;
3220 	vec.iov_len = 0;
3221 	ATF_REQUIRE(ptrace(PT_GETREGSET, wpid, (caddr_t)&vec, NT_PRSTATUS) !=
3222 	    -1);
3223 	ATF_REQUIRE(vec.iov_len == sizeof(prstatus));
3224 	ATF_REQUIRE(vec.iov_base == NULL);
3225 
3226 	/* Read the registers. */
3227 	memset(&prstatus, 0, sizeof(prstatus));
3228 	vec.iov_base = &prstatus;
3229 	ATF_REQUIRE(ptrace(PT_GETREGSET, wpid, (caddr_t)&vec, NT_PRSTATUS) !=
3230 	    -1);
3231 	ATF_REQUIRE(vec.iov_len == sizeof(prstatus));
3232 	ATF_REQUIRE(vec.iov_base == &prstatus);
3233 	ATF_REQUIRE(prstatus.pr_statussz == sizeof(prstatus));
3234 
3235 	/* Write the registers back. */
3236 	ATF_REQUIRE(ptrace(PT_SETREGSET, wpid, (caddr_t)&vec, NT_PRSTATUS) !=
3237 	    -1);
3238 
3239 #if defined(__aarch64__)
3240 	vec.iov_base = &addr_mask;
3241 	vec.iov_len = sizeof(addr_mask);
3242 	ATF_REQUIRE(ptrace(PT_GETREGSET, wpid, (caddr_t)&vec,
3243 	    NT_ARM_ADDR_MASK) != -1);
3244 	REQUIRE_EQ(addr_mask.code, addr_mask.data);
3245 	ATF_REQUIRE(addr_mask.code == 0 ||
3246 	    addr_mask.code == 0xff7f000000000000UL);
3247 #endif
3248 
3249 	REQUIRE_EQ(ptrace(PT_CONTINUE, child, (caddr_t)1, 0), 0);
3250 
3251 	/* The second wait() should report the exit status. */
3252 	wpid = waitpid(child, &status, 0);
3253 	REQUIRE_EQ(wpid, child);
3254 	ATF_REQUIRE(WIFEXITED(status));
3255 	REQUIRE_EQ(WEXITSTATUS(status), 1);
3256 
3257 	/* The child should no longer exist. */
3258 	wpid = waitpid(child, &status, 0);
3259 	REQUIRE_EQ(wpid, -1);
3260 	REQUIRE_EQ(errno, ECHILD);
3261 }
3262 
3263 static void *
3264 raise_sigstop_thread(void *arg __unused)
3265 {
3266 
3267 	raise(SIGSTOP);
3268 	return NULL;
3269 }
3270 
3271 static void *
3272 sleep_thread(void *arg __unused)
3273 {
3274 
3275 	sleep(60);
3276 	return NULL;
3277 }
3278 
3279 static void
3280 terminate_with_pending_sigstop(bool sigstop_from_main_thread)
3281 {
3282 	pid_t fpid, wpid;
3283 	int status, i;
3284 	cpuset_t setmask;
3285 	cpusetid_t setid;
3286 	pthread_t t;
3287 
3288 	/*
3289 	 * Become the reaper for this process tree. We need to be able to check
3290 	 * that both child and grandchild have died.
3291 	 */
3292 	REQUIRE_EQ(procctl(P_PID, getpid(), PROC_REAP_ACQUIRE, NULL), 0);
3293 
3294 	fpid = fork();
3295 	ATF_REQUIRE(fpid >= 0);
3296 	if (fpid == 0) {
3297 		fpid = fork();
3298 		CHILD_REQUIRE(fpid >= 0);
3299 		if (fpid == 0) {
3300 			trace_me();
3301 
3302 			/* Pin to CPU 0 to serialize thread execution. */
3303 			CPU_ZERO(&setmask);
3304 			CPU_SET(0, &setmask);
3305 			CHILD_REQUIRE_EQ(cpuset(&setid), 0);
3306 			CHILD_REQUIRE(cpuset_setaffinity(CPU_LEVEL_CPUSET,
3307 			    CPU_WHICH_CPUSET, setid,
3308 			    sizeof(setmask), &setmask) == 0);
3309 
3310 			if (sigstop_from_main_thread) {
3311 				/*
3312 				 * We expect the SIGKILL sent when our parent
3313 				 * dies to be delivered to the new thread.
3314 				 * Raise the SIGSTOP in this thread so the
3315 				 * threads compete.
3316 				 */
3317 				CHILD_REQUIRE(pthread_create(&t, NULL,
3318 				    sleep_thread, NULL) == 0);
3319 				raise(SIGSTOP);
3320 			} else {
3321 				/*
3322 				 * We expect the SIGKILL to be delivered to
3323 				 * this thread. After creating the new thread,
3324 				 * just get off the CPU so the other thread can
3325 				 * raise the SIGSTOP.
3326 				 */
3327 				CHILD_REQUIRE(pthread_create(&t, NULL,
3328 				    raise_sigstop_thread, NULL) == 0);
3329 				sleep(60);
3330 			}
3331 
3332 			exit(0);
3333 		}
3334 		/* First stop is trace_me() immediately after fork. */
3335 		wpid = waitpid(fpid, &status, 0);
3336 		CHILD_REQUIRE_EQ(wpid, fpid);
3337 		CHILD_REQUIRE(WIFSTOPPED(status));
3338 		CHILD_REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3339 
3340 		CHILD_REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3341 
3342 		/* Second stop is from the raise(SIGSTOP). */
3343 		wpid = waitpid(fpid, &status, 0);
3344 		CHILD_REQUIRE_EQ(wpid, fpid);
3345 		CHILD_REQUIRE(WIFSTOPPED(status));
3346 		CHILD_REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3347 
3348 		/*
3349 		 * Terminate tracing process without detaching. Our child
3350 		 * should be killed.
3351 		 */
3352 		exit(0);
3353 	}
3354 
3355 	/*
3356 	 * We should get a normal exit from our immediate child and a SIGKILL
3357 	 * exit from our grandchild. The latter case is the interesting one.
3358 	 * Our grandchild should not have stopped due to the SIGSTOP that was
3359 	 * left dangling when its parent died.
3360 	 */
3361 	for (i = 0; i < 2; ++i) {
3362 		wpid = wait(&status);
3363 		if (wpid == fpid) {
3364 			ATF_REQUIRE(WIFEXITED(status));
3365 			REQUIRE_EQ(WEXITSTATUS(status), 0);
3366 		} else {
3367 			ATF_REQUIRE(WIFSIGNALED(status));
3368 			REQUIRE_EQ(WTERMSIG(status), SIGKILL);
3369 		}
3370 	}
3371 }
3372 
3373 /*
3374  * These two tests ensure that if the tracing process exits without detaching
3375  * just after the child received a SIGSTOP, the child is cleanly killed and
3376  * doesn't go to sleep due to the SIGSTOP. The parent's death will send a
3377  * SIGKILL to the child. If the SIGKILL and the SIGSTOP are handled by
3378  * different threads, the SIGKILL must win.  There are two variants of this
3379  * test, designed to catch the case where the SIGKILL is delivered to the
3380  * younger thread (the first test) and the case where the SIGKILL is delivered
3381  * to the older thread (the second test). This behavior has changed in the
3382  * past, so make no assumption.
3383  */
3384 ATF_TC(ptrace__parent_terminate_with_pending_sigstop1);
3385 ATF_TC_HEAD(ptrace__parent_terminate_with_pending_sigstop1, tc)
3386 {
3387 
3388 	atf_tc_set_md_var(tc, "require.user", "root");
3389 }
3390 ATF_TC_BODY(ptrace__parent_terminate_with_pending_sigstop1, tc)
3391 {
3392 
3393 	terminate_with_pending_sigstop(true);
3394 }
3395 
3396 ATF_TC(ptrace__parent_terminate_with_pending_sigstop2);
3397 ATF_TC_HEAD(ptrace__parent_terminate_with_pending_sigstop2, tc)
3398 {
3399 
3400 	atf_tc_set_md_var(tc, "require.user", "root");
3401 }
3402 ATF_TC_BODY(ptrace__parent_terminate_with_pending_sigstop2, tc)
3403 {
3404 
3405 	terminate_with_pending_sigstop(false);
3406 }
3407 
3408 /*
3409  * Verify that after ptrace() discards a SIGKILL signal, the event mask
3410  * is not modified.
3411  */
3412 ATF_TC_WITHOUT_HEAD(ptrace__event_mask_sigkill_discard);
3413 ATF_TC_BODY(ptrace__event_mask_sigkill_discard, tc)
3414 {
3415 	struct ptrace_lwpinfo pl;
3416 	pid_t fpid, wpid;
3417 	int status, event_mask, new_event_mask;
3418 
3419 	ATF_REQUIRE((fpid = fork()) != -1);
3420 	if (fpid == 0) {
3421 		trace_me();
3422 		raise(SIGSTOP);
3423 		exit(0);
3424 	}
3425 
3426 	/* The first wait() should report the stop from trace_me(). */
3427 	wpid = waitpid(fpid, &status, 0);
3428 	REQUIRE_EQ(wpid, fpid);
3429 	ATF_REQUIRE(WIFSTOPPED(status));
3430 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3431 
3432 	/* Set several unobtrusive event bits. */
3433 	event_mask = PTRACE_EXEC | PTRACE_FORK | PTRACE_LWP;
3434 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, wpid, (caddr_t)&event_mask,
3435 	    sizeof(event_mask)) == 0);
3436 
3437 	/* Send a SIGKILL without using ptrace. */
3438 	REQUIRE_EQ(kill(fpid, SIGKILL), 0);
3439 
3440 	/* Continue the child ignoring the SIGSTOP. */
3441 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3442 
3443 	/* The next stop should be due to the SIGKILL. */
3444 	wpid = waitpid(fpid, &status, 0);
3445 	REQUIRE_EQ(wpid, fpid);
3446 	ATF_REQUIRE(WIFSTOPPED(status));
3447 	REQUIRE_EQ(WSTOPSIG(status), SIGKILL);
3448 
3449 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3450 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
3451 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGKILL);
3452 
3453 	/* Continue the child ignoring the SIGKILL. */
3454 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3455 
3456 	/* The next wait() should report the stop from SIGSTOP. */
3457 	wpid = waitpid(fpid, &status, 0);
3458 	REQUIRE_EQ(wpid, fpid);
3459 	ATF_REQUIRE(WIFSTOPPED(status));
3460 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3461 
3462 	/* Check the current event mask. It should not have changed. */
3463 	new_event_mask = 0;
3464 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, wpid, (caddr_t)&new_event_mask,
3465 	    sizeof(new_event_mask)) == 0);
3466 	REQUIRE_EQ(event_mask, new_event_mask);
3467 
3468 	/* Continue the child to let it exit. */
3469 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3470 
3471 	/* The last event should be for the child process's exit. */
3472 	wpid = waitpid(fpid, &status, 0);
3473 	ATF_REQUIRE(WIFEXITED(status));
3474 	REQUIRE_EQ(WEXITSTATUS(status), 0);
3475 
3476 	wpid = wait(&status);
3477 	REQUIRE_EQ(wpid, -1);
3478 	REQUIRE_EQ(errno, ECHILD);
3479 }
3480 
3481 static void *
3482 flock_thread(void *arg)
3483 {
3484 	int fd;
3485 
3486 	fd = *(int *)arg;
3487 	(void)flock(fd, LOCK_EX);
3488 	(void)flock(fd, LOCK_UN);
3489 	return (NULL);
3490 }
3491 
3492 /*
3493  * Verify that PT_ATTACH will suspend threads sleeping in an SBDRY section.
3494  * We rely on the fact that the lockf implementation sets SBDRY before blocking
3495  * on a lock. This is a regression test for r318191.
3496  */
3497 ATF_TC_WITHOUT_HEAD(ptrace__PT_ATTACH_with_SBDRY_thread);
3498 ATF_TC_BODY(ptrace__PT_ATTACH_with_SBDRY_thread, tc)
3499 {
3500 	pthread_barrier_t barrier;
3501 	pthread_barrierattr_t battr;
3502 	char tmpfile[64];
3503 	pid_t child, wpid;
3504 	int error, fd, i, status;
3505 
3506 	REQUIRE_EQ(pthread_barrierattr_init(&battr), 0);
3507 	ATF_REQUIRE(pthread_barrierattr_setpshared(&battr,
3508 	    PTHREAD_PROCESS_SHARED) == 0);
3509 	REQUIRE_EQ(pthread_barrier_init(&barrier, &battr, 2), 0);
3510 
3511 	(void)snprintf(tmpfile, sizeof(tmpfile), "./ptrace.XXXXXX");
3512 	fd = mkstemp(tmpfile);
3513 	ATF_REQUIRE(fd >= 0);
3514 
3515 	ATF_REQUIRE((child = fork()) != -1);
3516 	if (child == 0) {
3517 		pthread_t t[2];
3518 		int cfd;
3519 
3520 		error = pthread_barrier_wait(&barrier);
3521 		if (error != 0 && error != PTHREAD_BARRIER_SERIAL_THREAD)
3522 			_exit(1);
3523 
3524 		cfd = open(tmpfile, O_RDONLY);
3525 		if (cfd < 0)
3526 			_exit(1);
3527 
3528 		/*
3529 		 * We want at least two threads blocked on the file lock since
3530 		 * the SIGSTOP from PT_ATTACH may kick one of them out of
3531 		 * sleep.
3532 		 */
3533 		if (pthread_create(&t[0], NULL, flock_thread, &cfd) != 0)
3534 			_exit(1);
3535 		if (pthread_create(&t[1], NULL, flock_thread, &cfd) != 0)
3536 			_exit(1);
3537 		if (pthread_join(t[0], NULL) != 0)
3538 			_exit(1);
3539 		if (pthread_join(t[1], NULL) != 0)
3540 			_exit(1);
3541 		_exit(0);
3542 	}
3543 
3544 	REQUIRE_EQ(flock(fd, LOCK_EX), 0);
3545 
3546 	error = pthread_barrier_wait(&barrier);
3547 	ATF_REQUIRE(error == 0 || error == PTHREAD_BARRIER_SERIAL_THREAD);
3548 
3549 	/*
3550 	 * Give the child some time to block. Is there a better way to do this?
3551 	 */
3552 	sleep(1);
3553 
3554 	/*
3555 	 * Attach and give the child 3 seconds to stop.
3556 	 */
3557 	REQUIRE_EQ(ptrace(PT_ATTACH, child, NULL, 0), 0);
3558 	for (i = 0; i < 3; i++) {
3559 		wpid = waitpid(child, &status, WNOHANG);
3560 		if (wpid == child && WIFSTOPPED(status) &&
3561 		    WSTOPSIG(status) == SIGSTOP)
3562 			break;
3563 		sleep(1);
3564 	}
3565 	ATF_REQUIRE_MSG(i < 3, "failed to stop child process after PT_ATTACH");
3566 
3567 	REQUIRE_EQ(ptrace(PT_DETACH, child, NULL, 0), 0);
3568 
3569 	REQUIRE_EQ(flock(fd, LOCK_UN), 0);
3570 	REQUIRE_EQ(unlink(tmpfile), 0);
3571 	REQUIRE_EQ(close(fd), 0);
3572 }
3573 
3574 static void
3575 sigusr1_step_handler(int sig)
3576 {
3577 
3578 	CHILD_REQUIRE_EQ(sig, SIGUSR1);
3579 	raise(SIGABRT);
3580 }
3581 
3582 /*
3583  * Verify that PT_STEP with a signal invokes the signal before
3584  * stepping the next instruction (and that the next instruction is
3585  * stepped correctly).
3586  */
3587 ATF_TC_WITHOUT_HEAD(ptrace__PT_STEP_with_signal);
3588 ATF_TC_BODY(ptrace__PT_STEP_with_signal, tc)
3589 {
3590 	struct ptrace_lwpinfo pl;
3591 	pid_t fpid, wpid;
3592 	int status;
3593 
3594 	ATF_REQUIRE((fpid = fork()) != -1);
3595 	if (fpid == 0) {
3596 		trace_me();
3597 		signal(SIGUSR1, sigusr1_step_handler);
3598 		raise(SIGABRT);
3599 		exit(1);
3600 	}
3601 
3602 	/* The first wait() should report the stop from SIGSTOP. */
3603 	wpid = waitpid(fpid, &status, 0);
3604 	REQUIRE_EQ(wpid, fpid);
3605 	ATF_REQUIRE(WIFSTOPPED(status));
3606 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3607 
3608 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3609 
3610 	/* The next stop should report the SIGABRT in the child body. */
3611 	wpid = waitpid(fpid, &status, 0);
3612 	REQUIRE_EQ(wpid, fpid);
3613 	ATF_REQUIRE(WIFSTOPPED(status));
3614 	REQUIRE_EQ(WSTOPSIG(status), SIGABRT);
3615 
3616 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3617 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
3618 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGABRT);
3619 
3620 	/* Step the child process inserting SIGUSR1. */
3621 	REQUIRE_EQ(ptrace(PT_STEP, fpid, (caddr_t)1, SIGUSR1), 0);
3622 
3623 	/* The next stop should report the SIGABRT in the signal handler. */
3624 	wpid = waitpid(fpid, &status, 0);
3625 	REQUIRE_EQ(wpid, fpid);
3626 	ATF_REQUIRE(WIFSTOPPED(status));
3627 	REQUIRE_EQ(WSTOPSIG(status), SIGABRT);
3628 
3629 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3630 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
3631 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGABRT);
3632 
3633 	/* Continue the child process discarding the signal. */
3634 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3635 
3636 	/* The next stop should report a trace trap from PT_STEP. */
3637 	wpid = waitpid(fpid, &status, 0);
3638 	REQUIRE_EQ(wpid, fpid);
3639 	ATF_REQUIRE(WIFSTOPPED(status));
3640 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
3641 
3642 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3643 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
3644 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGTRAP);
3645 	REQUIRE_EQ(pl.pl_siginfo.si_code, TRAP_TRACE);
3646 
3647 	/* Continue the child to let it exit. */
3648 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3649 
3650 	/* The last event should be for the child process's exit. */
3651 	wpid = waitpid(fpid, &status, 0);
3652 	ATF_REQUIRE(WIFEXITED(status));
3653 	REQUIRE_EQ(WEXITSTATUS(status), 1);
3654 
3655 	wpid = wait(&status);
3656 	REQUIRE_EQ(wpid, -1);
3657 	REQUIRE_EQ(errno, ECHILD);
3658 }
3659 
3660 #ifdef HAVE_BREAKPOINT
3661 /*
3662  * Verify that a SIGTRAP event with the TRAP_BRKPT code is reported
3663  * for a breakpoint trap.
3664  */
3665 ATF_TC_WITHOUT_HEAD(ptrace__breakpoint_siginfo);
3666 ATF_TC_BODY(ptrace__breakpoint_siginfo, tc)
3667 {
3668 	struct ptrace_lwpinfo pl;
3669 	pid_t fpid, wpid;
3670 	int status;
3671 
3672 	ATF_REQUIRE((fpid = fork()) != -1);
3673 	if (fpid == 0) {
3674 		trace_me();
3675 		breakpoint();
3676 		exit(1);
3677 	}
3678 
3679 	/* The first wait() should report the stop from SIGSTOP. */
3680 	wpid = waitpid(fpid, &status, 0);
3681 	REQUIRE_EQ(wpid, fpid);
3682 	ATF_REQUIRE(WIFSTOPPED(status));
3683 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3684 
3685 	/* Continue the child ignoring the SIGSTOP. */
3686 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3687 
3688 	/* The second wait() should report hitting the breakpoint. */
3689 	wpid = waitpid(fpid, &status, 0);
3690 	REQUIRE_EQ(wpid, fpid);
3691 	ATF_REQUIRE(WIFSTOPPED(status));
3692 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
3693 
3694 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3695 	ATF_REQUIRE((pl.pl_flags & PL_FLAG_SI) != 0);
3696 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGTRAP);
3697 	REQUIRE_EQ(pl.pl_siginfo.si_code, TRAP_BRKPT);
3698 
3699 	/* Kill the child process. */
3700 	REQUIRE_EQ(ptrace(PT_KILL, fpid, 0, 0), 0);
3701 
3702 	/* The last wait() should report the SIGKILL. */
3703 	wpid = waitpid(fpid, &status, 0);
3704 	REQUIRE_EQ(wpid, fpid);
3705 	ATF_REQUIRE(WIFSIGNALED(status));
3706 	REQUIRE_EQ(WTERMSIG(status), SIGKILL);
3707 
3708 	wpid = wait(&status);
3709 	REQUIRE_EQ(wpid, -1);
3710 	REQUIRE_EQ(errno, ECHILD);
3711 }
3712 #endif /* HAVE_BREAKPOINT */
3713 
3714 /*
3715  * Verify that a SIGTRAP event with the TRAP_TRACE code is reported
3716  * for a single-step trap from PT_STEP.
3717  */
3718 ATF_TC_WITHOUT_HEAD(ptrace__step_siginfo);
3719 ATF_TC_BODY(ptrace__step_siginfo, tc)
3720 {
3721 	struct ptrace_lwpinfo pl;
3722 	pid_t fpid, wpid;
3723 	int status;
3724 
3725 	ATF_REQUIRE((fpid = fork()) != -1);
3726 	if (fpid == 0) {
3727 		trace_me();
3728 		exit(1);
3729 	}
3730 
3731 	/* The first wait() should report the stop from SIGSTOP. */
3732 	wpid = waitpid(fpid, &status, 0);
3733 	REQUIRE_EQ(wpid, fpid);
3734 	ATF_REQUIRE(WIFSTOPPED(status));
3735 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3736 
3737 	/* Step the child ignoring the SIGSTOP. */
3738 	REQUIRE_EQ(ptrace(PT_STEP, fpid, (caddr_t)1, 0), 0);
3739 
3740 	/* The second wait() should report a single-step trap. */
3741 	wpid = waitpid(fpid, &status, 0);
3742 	REQUIRE_EQ(wpid, fpid);
3743 	ATF_REQUIRE(WIFSTOPPED(status));
3744 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
3745 
3746 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3747 	ATF_REQUIRE((pl.pl_flags & PL_FLAG_SI) != 0);
3748 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGTRAP);
3749 	REQUIRE_EQ(pl.pl_siginfo.si_code, TRAP_TRACE);
3750 
3751 	/* Continue the child process. */
3752 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3753 
3754 	/* The last event should be for the child process's exit. */
3755 	wpid = waitpid(fpid, &status, 0);
3756 	ATF_REQUIRE(WIFEXITED(status));
3757 	REQUIRE_EQ(WEXITSTATUS(status), 1);
3758 
3759 	wpid = wait(&status);
3760 	REQUIRE_EQ(wpid, -1);
3761 	REQUIRE_EQ(errno, ECHILD);
3762 }
3763 
3764 #if defined(HAVE_BREAKPOINT) && defined(SKIP_BREAK)
3765 static void *
3766 continue_thread(void *arg __unused)
3767 {
3768 	breakpoint();
3769 	return (NULL);
3770 }
3771 
3772 static __dead2 void
3773 continue_thread_main(void)
3774 {
3775 	pthread_t threads[2];
3776 
3777 	CHILD_REQUIRE(pthread_create(&threads[0], NULL, continue_thread,
3778 	    NULL) == 0);
3779 	CHILD_REQUIRE(pthread_create(&threads[1], NULL, continue_thread,
3780 	    NULL) == 0);
3781 	CHILD_REQUIRE_EQ(pthread_join(threads[0], NULL), 0);
3782 	CHILD_REQUIRE_EQ(pthread_join(threads[1], NULL), 0);
3783 	exit(1);
3784 }
3785 
3786 /*
3787  * Ensure that PT_CONTINUE clears the status of the thread that
3788  * triggered the stop even if a different thread's LWP was passed to
3789  * PT_CONTINUE.
3790  */
3791 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_different_thread);
3792 ATF_TC_BODY(ptrace__PT_CONTINUE_different_thread, tc)
3793 {
3794 	struct ptrace_lwpinfo pl;
3795 	pid_t fpid, wpid;
3796 	lwpid_t lwps[2];
3797 	bool hit_break[2];
3798 	struct reg reg;
3799 	int i, j, status;
3800 
3801 	ATF_REQUIRE((fpid = fork()) != -1);
3802 	if (fpid == 0) {
3803 		trace_me();
3804 		continue_thread_main();
3805 	}
3806 
3807 	/* The first wait() should report the stop from SIGSTOP. */
3808 	wpid = waitpid(fpid, &status, 0);
3809 	REQUIRE_EQ(wpid, fpid);
3810 	ATF_REQUIRE(WIFSTOPPED(status));
3811 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3812 
3813 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
3814 	    sizeof(pl)) != -1);
3815 
3816 	REQUIRE_EQ(ptrace(PT_LWP_EVENTS, wpid, NULL, 1), 0);
3817 
3818 	/* Continue the child ignoring the SIGSTOP. */
3819 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3820 
3821 	/* One of the new threads should report it's birth. */
3822 	wpid = waitpid(fpid, &status, 0);
3823 	REQUIRE_EQ(wpid, fpid);
3824 	ATF_REQUIRE(WIFSTOPPED(status));
3825 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
3826 
3827 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3828 	REQUIRE_EQ((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)),
3829 	    (PL_FLAG_BORN | PL_FLAG_SCX));
3830 	lwps[0] = pl.pl_lwpid;
3831 
3832 	/*
3833 	 * Suspend this thread to ensure both threads are alive before
3834 	 * hitting the breakpoint.
3835 	 */
3836 	ATF_REQUIRE(ptrace(PT_SUSPEND, lwps[0], NULL, 0) != -1);
3837 
3838 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3839 
3840 	/* Second thread should report it's birth. */
3841 	wpid = waitpid(fpid, &status, 0);
3842 	REQUIRE_EQ(wpid, fpid);
3843 	ATF_REQUIRE(WIFSTOPPED(status));
3844 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
3845 
3846 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3847 	REQUIRE_EQ((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)),
3848 	    (PL_FLAG_BORN | PL_FLAG_SCX));
3849 	ATF_REQUIRE(pl.pl_lwpid != lwps[0]);
3850 	lwps[1] = pl.pl_lwpid;
3851 
3852 	/* Resume both threads waiting for breakpoint events. */
3853 	hit_break[0] = hit_break[1] = false;
3854 	ATF_REQUIRE(ptrace(PT_RESUME, lwps[0], NULL, 0) != -1);
3855 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3856 
3857 	/* One thread should report a breakpoint. */
3858 	wpid = waitpid(fpid, &status, 0);
3859 	REQUIRE_EQ(wpid, fpid);
3860 	ATF_REQUIRE(WIFSTOPPED(status));
3861 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
3862 
3863 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3864 	ATF_REQUIRE((pl.pl_flags & PL_FLAG_SI) != 0);
3865 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGTRAP);
3866 	REQUIRE_EQ(pl.pl_siginfo.si_code, TRAP_BRKPT);
3867 	if (pl.pl_lwpid == lwps[0])
3868 		i = 0;
3869 	else
3870 		i = 1;
3871 	hit_break[i] = true;
3872 	ATF_REQUIRE(ptrace(PT_GETREGS, pl.pl_lwpid, (caddr_t)&reg, 0) != -1);
3873 	SKIP_BREAK(&reg);
3874 	ATF_REQUIRE(ptrace(PT_SETREGS, pl.pl_lwpid, (caddr_t)&reg, 0) != -1);
3875 
3876 	/*
3877 	 * Resume both threads but pass the other thread's LWPID to
3878 	 * PT_CONTINUE.
3879 	 */
3880 	REQUIRE_EQ(ptrace(PT_CONTINUE, lwps[i ^ 1], (caddr_t)1, 0), 0);
3881 
3882 	/*
3883 	 * Will now get two thread exit events and one more breakpoint
3884 	 * event.
3885 	 */
3886 	for (j = 0; j < 3; j++) {
3887 		wpid = waitpid(fpid, &status, 0);
3888 		REQUIRE_EQ(wpid, fpid);
3889 		ATF_REQUIRE(WIFSTOPPED(status));
3890 		REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
3891 
3892 		ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
3893 		    sizeof(pl)) != -1);
3894 
3895 		if (pl.pl_lwpid == lwps[0])
3896 			i = 0;
3897 		else
3898 			i = 1;
3899 
3900 		ATF_REQUIRE_MSG(lwps[i] != 0, "event for exited thread");
3901 		if (pl.pl_flags & PL_FLAG_EXITED) {
3902 			ATF_REQUIRE_MSG(hit_break[i],
3903 			    "exited thread did not report breakpoint");
3904 			lwps[i] = 0;
3905 		} else {
3906 			ATF_REQUIRE((pl.pl_flags & PL_FLAG_SI) != 0);
3907 			REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGTRAP);
3908 			REQUIRE_EQ(pl.pl_siginfo.si_code, TRAP_BRKPT);
3909 			ATF_REQUIRE_MSG(!hit_break[i],
3910 			    "double breakpoint event");
3911 			hit_break[i] = true;
3912 			ATF_REQUIRE(ptrace(PT_GETREGS, pl.pl_lwpid, (caddr_t)&reg,
3913 			    0) != -1);
3914 			SKIP_BREAK(&reg);
3915 			ATF_REQUIRE(ptrace(PT_SETREGS, pl.pl_lwpid, (caddr_t)&reg,
3916 			    0) != -1);
3917 		}
3918 
3919 		REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3920 	}
3921 
3922 	/* Both threads should have exited. */
3923 	REQUIRE_EQ(lwps[0], 0);
3924 	REQUIRE_EQ(lwps[1], 0);
3925 
3926 	/* The last event should be for the child process's exit. */
3927 	wpid = waitpid(fpid, &status, 0);
3928 	ATF_REQUIRE(WIFEXITED(status));
3929 	REQUIRE_EQ(WEXITSTATUS(status), 1);
3930 
3931 	wpid = wait(&status);
3932 	REQUIRE_EQ(wpid, -1);
3933 	REQUIRE_EQ(errno, ECHILD);
3934 }
3935 #endif
3936 
3937 /*
3938  * Verify that PT_LWPINFO doesn't return stale siginfo.
3939  */
3940 ATF_TC_WITHOUT_HEAD(ptrace__PT_LWPINFO_stale_siginfo);
3941 ATF_TC_BODY(ptrace__PT_LWPINFO_stale_siginfo, tc)
3942 {
3943 	struct ptrace_lwpinfo pl;
3944 	pid_t fpid, wpid;
3945 	int events, status;
3946 
3947 	ATF_REQUIRE((fpid = fork()) != -1);
3948 	if (fpid == 0) {
3949 		trace_me();
3950 		raise(SIGABRT);
3951 		exit(1);
3952 	}
3953 
3954 	/* The first wait() should report the stop from SIGSTOP. */
3955 	wpid = waitpid(fpid, &status, 0);
3956 	REQUIRE_EQ(wpid, fpid);
3957 	ATF_REQUIRE(WIFSTOPPED(status));
3958 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
3959 
3960 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3961 
3962 	/* The next stop should report the SIGABRT in the child body. */
3963 	wpid = waitpid(fpid, &status, 0);
3964 	REQUIRE_EQ(wpid, fpid);
3965 	ATF_REQUIRE(WIFSTOPPED(status));
3966 	REQUIRE_EQ(WSTOPSIG(status), SIGABRT);
3967 
3968 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3969 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
3970 	REQUIRE_EQ(pl.pl_siginfo.si_signo, SIGABRT);
3971 
3972 	/*
3973 	 * Continue the process ignoring the signal, but enabling
3974 	 * syscall traps.
3975 	 */
3976 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
3977 
3978 	/*
3979 	 * The next stop should report a system call entry from
3980 	 * exit().  PL_FLAGS_SI should not be set.
3981 	 */
3982 	wpid = waitpid(fpid, &status, 0);
3983 	REQUIRE_EQ(wpid, fpid);
3984 	ATF_REQUIRE(WIFSTOPPED(status));
3985 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
3986 
3987 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3988 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
3989 	REQUIRE_EQ((pl.pl_flags & PL_FLAG_SI), 0);
3990 
3991 	/* Disable syscall tracing and continue the child to let it exit. */
3992 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
3993 	    sizeof(events)) == 0);
3994 	events &= ~PTRACE_SYSCALL;
3995 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, fpid, (caddr_t)&events,
3996 	    sizeof(events)) == 0);
3997 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
3998 
3999 	/* The last event should be for the child process's exit. */
4000 	wpid = waitpid(fpid, &status, 0);
4001 	ATF_REQUIRE(WIFEXITED(status));
4002 	REQUIRE_EQ(WEXITSTATUS(status), 1);
4003 
4004 	wpid = wait(&status);
4005 	REQUIRE_EQ(wpid, -1);
4006 	REQUIRE_EQ(errno, ECHILD);
4007 }
4008 
4009 /*
4010  * A simple test of PT_GET_SC_ARGS and PT_GET_SC_RET.
4011  */
4012 ATF_TC_WITHOUT_HEAD(ptrace__syscall_args);
4013 ATF_TC_BODY(ptrace__syscall_args, tc)
4014 {
4015 	struct ptrace_lwpinfo pl;
4016 	struct ptrace_sc_ret psr;
4017 	pid_t fpid, wpid;
4018 	register_t args[2];
4019 	int events, status;
4020 
4021 	ATF_REQUIRE((fpid = fork()) != -1);
4022 	if (fpid == 0) {
4023 		trace_me();
4024 		kill(getpid(), 0);
4025 		/* Close a fd that should not exist. */
4026 		close(12345);
4027 		exit(1);
4028 	}
4029 
4030 	/* The first wait() should report the stop from SIGSTOP. */
4031 	wpid = waitpid(fpid, &status, 0);
4032 	REQUIRE_EQ(wpid, fpid);
4033 	ATF_REQUIRE(WIFSTOPPED(status));
4034 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
4035 
4036 	/*
4037 	 * Continue the process ignoring the signal, but enabling
4038 	 * syscall traps.
4039 	 */
4040 	REQUIRE_EQ(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0), 0);
4041 
4042 	/*
4043 	 * The next stop should be the syscall entry from getpid().
4044 	 */
4045 	wpid = waitpid(fpid, &status, 0);
4046 	REQUIRE_EQ(wpid, fpid);
4047 	ATF_REQUIRE(WIFSTOPPED(status));
4048 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
4049 
4050 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
4051 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
4052 	REQUIRE_EQ(pl.pl_syscall_code, (unsigned)SYS_getpid);
4053 
4054 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
4055 
4056 	/*
4057 	 * The next stop should be the syscall exit from getpid().
4058 	 */
4059 	wpid = waitpid(fpid, &status, 0);
4060 	REQUIRE_EQ(wpid, fpid);
4061 	ATF_REQUIRE(WIFSTOPPED(status));
4062 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
4063 
4064 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
4065 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
4066 	REQUIRE_EQ(pl.pl_syscall_code, (unsigned)SYS_getpid);
4067 
4068 	ATF_REQUIRE(ptrace(PT_GET_SC_RET, wpid, (caddr_t)&psr,
4069 	    sizeof(psr)) != -1);
4070 	REQUIRE_EQ(psr.sr_error, 0);
4071 	REQUIRE_EQ(psr.sr_retval[0], wpid);
4072 
4073 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
4074 
4075 	/*
4076 	 * The next stop should be the syscall entry from kill().
4077 	 */
4078 	wpid = waitpid(fpid, &status, 0);
4079 	REQUIRE_EQ(wpid, fpid);
4080 	ATF_REQUIRE(WIFSTOPPED(status));
4081 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
4082 
4083 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
4084 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
4085 	REQUIRE_EQ(pl.pl_syscall_code, (unsigned)SYS_kill);
4086 	REQUIRE_EQ(pl.pl_syscall_narg, 2u);
4087 
4088 	ATF_REQUIRE(ptrace(PT_GET_SC_ARGS, wpid, (caddr_t)args,
4089 	    sizeof(args)) != -1);
4090 	REQUIRE_EQ(args[0], wpid);
4091 	REQUIRE_EQ(args[1], 0);
4092 
4093 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
4094 
4095 	/*
4096 	 * The next stop should be the syscall exit from kill().
4097 	 */
4098 	wpid = waitpid(fpid, &status, 0);
4099 	REQUIRE_EQ(wpid, fpid);
4100 	ATF_REQUIRE(WIFSTOPPED(status));
4101 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
4102 
4103 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
4104 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
4105 	REQUIRE_EQ(pl.pl_syscall_code, (unsigned)SYS_kill);
4106 
4107 	ATF_REQUIRE(ptrace(PT_GET_SC_RET, wpid, (caddr_t)&psr,
4108 	    sizeof(psr)) != -1);
4109 	REQUIRE_EQ(psr.sr_error, 0);
4110 
4111 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
4112 
4113 	/*
4114 	 * The next stop should be the syscall entry from close().
4115 	 */
4116 	wpid = waitpid(fpid, &status, 0);
4117 	REQUIRE_EQ(wpid, fpid);
4118 	ATF_REQUIRE(WIFSTOPPED(status));
4119 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
4120 
4121 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
4122 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
4123 	REQUIRE_EQ(pl.pl_syscall_code, (unsigned)SYS_close);
4124 	REQUIRE_EQ(pl.pl_syscall_narg, 1u);
4125 
4126 	ATF_REQUIRE(ptrace(PT_GET_SC_ARGS, wpid, (caddr_t)args,
4127 	    sizeof(args)) != -1);
4128 	REQUIRE_EQ(args[0], 12345);
4129 
4130 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
4131 
4132 	/*
4133 	 * The next stop should be the syscall exit from close().
4134 	 */
4135 	wpid = waitpid(fpid, &status, 0);
4136 	REQUIRE_EQ(wpid, fpid);
4137 	ATF_REQUIRE(WIFSTOPPED(status));
4138 	REQUIRE_EQ(WSTOPSIG(status), SIGTRAP);
4139 
4140 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
4141 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
4142 	REQUIRE_EQ(pl.pl_syscall_code, (unsigned)SYS_close);
4143 
4144 	ATF_REQUIRE(ptrace(PT_GET_SC_RET, wpid, (caddr_t)&psr,
4145 	    sizeof(psr)) != -1);
4146 	REQUIRE_EQ(psr.sr_error, EBADF);
4147 
4148 	/* Disable syscall tracing and continue the child to let it exit. */
4149 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
4150 	    sizeof(events)) == 0);
4151 	events &= ~PTRACE_SYSCALL;
4152 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, fpid, (caddr_t)&events,
4153 	    sizeof(events)) == 0);
4154 	REQUIRE_EQ(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0), 0);
4155 
4156 	/* The last event should be for the child process's exit. */
4157 	wpid = waitpid(fpid, &status, 0);
4158 	ATF_REQUIRE(WIFEXITED(status));
4159 	REQUIRE_EQ(WEXITSTATUS(status), 1);
4160 
4161 	wpid = wait(&status);
4162 	REQUIRE_EQ(wpid, -1);
4163 	REQUIRE_EQ(errno, ECHILD);
4164 }
4165 
4166 /*
4167  * Verify that when the process is traced that it isn't reparent
4168  * to the init process when we close all process descriptors.
4169  */
4170 ATF_TC(ptrace__proc_reparent);
4171 ATF_TC_HEAD(ptrace__proc_reparent, tc)
4172 {
4173 
4174 	atf_tc_set_md_var(tc, "timeout", "2");
4175 }
4176 ATF_TC_BODY(ptrace__proc_reparent, tc)
4177 {
4178 	pid_t traced, debuger, wpid;
4179 	int pd, status;
4180 
4181 	traced = pdfork(&pd, 0);
4182 	ATF_REQUIRE(traced >= 0);
4183 	if (traced == 0) {
4184 		raise(SIGSTOP);
4185 		exit(0);
4186 	}
4187 	ATF_REQUIRE(pd >= 0);
4188 
4189 	debuger = fork();
4190 	ATF_REQUIRE(debuger >= 0);
4191 	if (debuger == 0) {
4192 		/* The traced process is reparented to debuger. */
4193 		REQUIRE_EQ(ptrace(PT_ATTACH, traced, 0, 0), 0);
4194 		wpid = waitpid(traced, &status, 0);
4195 		REQUIRE_EQ(wpid, traced);
4196 		ATF_REQUIRE(WIFSTOPPED(status));
4197 		REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
4198 		REQUIRE_EQ(close(pd), 0);
4199 		REQUIRE_EQ(ptrace(PT_DETACH, traced, (caddr_t)1, 0), 0);
4200 
4201 		/* We closed pd so we should not have any child. */
4202 		wpid = wait(&status);
4203 		REQUIRE_EQ(wpid, -1);
4204 		REQUIRE_EQ(errno, ECHILD);
4205 
4206 		exit(0);
4207 	}
4208 
4209 	REQUIRE_EQ(close(pd), 0);
4210 	wpid = waitpid(debuger, &status, 0);
4211 	REQUIRE_EQ(wpid, debuger);
4212 	REQUIRE_EQ(WEXITSTATUS(status), 0);
4213 
4214 	/* Check if we still have any child. */
4215 	wpid = wait(&status);
4216 	REQUIRE_EQ(wpid, -1);
4217 	REQUIRE_EQ(errno, ECHILD);
4218 }
4219 
4220 /*
4221  * Ensure that traced processes created with pdfork(2) are visible to
4222  * waitid(P_ALL).
4223  */
4224 ATF_TC_WITHOUT_HEAD(ptrace__procdesc_wait_child);
4225 ATF_TC_BODY(ptrace__procdesc_wait_child, tc)
4226 {
4227 	pid_t child, wpid;
4228 	int pd, status;
4229 
4230 	child = pdfork(&pd, 0);
4231 	ATF_REQUIRE(child >= 0);
4232 
4233 	if (child == 0) {
4234 		trace_me();
4235 		(void)raise(SIGSTOP);
4236 		exit(0);
4237 	}
4238 
4239 	wpid = waitpid(child, &status, 0);
4240 	REQUIRE_EQ(wpid, child);
4241 	ATF_REQUIRE(WIFSTOPPED(status));
4242 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
4243 
4244 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
4245 
4246 	wpid = wait(&status);
4247 	REQUIRE_EQ(wpid, child);
4248 	ATF_REQUIRE(WIFSTOPPED(status));
4249 	REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
4250 
4251 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
4252 
4253 	/*
4254 	 * If process was created by pdfork, the return code have to
4255 	 * be collected through process descriptor.
4256 	 */
4257 	wpid = wait(&status);
4258 	REQUIRE_EQ(wpid, -1);
4259 	REQUIRE_EQ(errno, ECHILD);
4260 
4261 	ATF_REQUIRE(close(pd) != -1);
4262 }
4263 
4264 /*
4265  * Ensure that traced processes created with pdfork(2) are not visible
4266  * after returning to parent - waitid(P_ALL).
4267  */
4268 ATF_TC_WITHOUT_HEAD(ptrace__procdesc_reparent_wait_child);
4269 ATF_TC_BODY(ptrace__procdesc_reparent_wait_child, tc)
4270 {
4271 	pid_t traced, debuger, wpid;
4272 	int pd, status;
4273 
4274 	traced = pdfork(&pd, 0);
4275 	ATF_REQUIRE(traced >= 0);
4276 	if (traced == 0) {
4277 		raise(SIGSTOP);
4278 		exit(0);
4279 	}
4280 	ATF_REQUIRE(pd >= 0);
4281 
4282 	/* Wait until the child process has stopped before fork()ing again. */
4283 	REQUIRE_EQ(traced, waitpid(traced, &status, WSTOPPED));
4284 	debuger = fork();
4285 	ATF_REQUIRE(debuger >= 0);
4286 	if (debuger == 0) {
4287 		/* The traced process is reparented to debuger. */
4288 		REQUIRE_EQ(ptrace(PT_ATTACH, traced, 0, 0), 0);
4289 		wpid = waitpid(traced, &status, 0);
4290 		REQUIRE_EQ(wpid, traced);
4291 		ATF_REQUIRE(WIFSTOPPED(status));
4292 		REQUIRE_EQ(WSTOPSIG(status), SIGSTOP);
4293 
4294 		/* Allow process to die. */
4295 		REQUIRE_EQ(ptrace(PT_CONTINUE, traced, (caddr_t)1, 0), 0);
4296 		wpid = waitpid(traced, &status, 0);
4297 		REQUIRE_EQ(wpid, traced);
4298 		ATF_REQUIRE(WIFEXITED(status));
4299 		REQUIRE_EQ(WEXITSTATUS(status), 0);
4300 
4301 		/* Reparent back to the orginal process. */
4302 		REQUIRE_EQ(close(pd), 0);
4303 		exit(0);
4304 	}
4305 
4306 	wpid = waitpid(debuger, &status, 0);
4307 	REQUIRE_EQ(wpid, debuger);
4308 	REQUIRE_EQ(WEXITSTATUS(status), 0);
4309 
4310 	/*
4311 	 * We have a child but it has a process descriptori
4312 	 * so we should not be able to collect it process.
4313 	 */
4314 	wpid = wait(&status);
4315 	REQUIRE_EQ(wpid, -1);
4316 	REQUIRE_EQ(errno, ECHILD);
4317 
4318 	REQUIRE_EQ(close(pd), 0);
4319 }
4320 
4321 ATF_TP_ADD_TCS(tp)
4322 {
4323 
4324 	ATF_TP_ADD_TC(tp, ptrace__parent_wait_after_trace_me);
4325 	ATF_TP_ADD_TC(tp, ptrace__parent_wait_after_attach);
4326 	ATF_TP_ADD_TC(tp, ptrace__parent_sees_exit_after_child_debugger);
4327 	ATF_TP_ADD_TC(tp, ptrace__parent_sees_exit_after_unrelated_debugger);
4328 	ATF_TP_ADD_TC(tp, ptrace__parent_exits_before_child);
4329 	ATF_TP_ADD_TC(tp, ptrace__follow_fork_both_attached);
4330 	ATF_TP_ADD_TC(tp, ptrace__follow_fork_child_detached);
4331 	ATF_TP_ADD_TC(tp, ptrace__follow_fork_parent_detached);
4332 	ATF_TP_ADD_TC(tp, ptrace__follow_fork_both_attached_unrelated_debugger);
4333 	ATF_TP_ADD_TC(tp,
4334 	    ptrace__follow_fork_child_detached_unrelated_debugger);
4335 	ATF_TP_ADD_TC(tp,
4336 	    ptrace__follow_fork_parent_detached_unrelated_debugger);
4337 	ATF_TP_ADD_TC(tp, ptrace__getppid);
4338 	ATF_TP_ADD_TC(tp, ptrace__new_child_pl_syscall_code_fork);
4339 	ATF_TP_ADD_TC(tp, ptrace__new_child_pl_syscall_code_vfork);
4340 	ATF_TP_ADD_TC(tp, ptrace__new_child_pl_syscall_code_thread);
4341 	ATF_TP_ADD_TC(tp, ptrace__lwp_events);
4342 	ATF_TP_ADD_TC(tp, ptrace__lwp_events_exec);
4343 	ATF_TP_ADD_TC(tp, ptrace__siginfo);
4344 	ATF_TP_ADD_TC(tp, ptrace__ptrace_exec_disable);
4345 	ATF_TP_ADD_TC(tp, ptrace__ptrace_exec_enable);
4346 	ATF_TP_ADD_TC(tp, ptrace__event_mask);
4347 	ATF_TP_ADD_TC(tp, ptrace__ptrace_vfork);
4348 	ATF_TP_ADD_TC(tp, ptrace__ptrace_vfork_follow);
4349 #ifdef HAVE_BREAKPOINT
4350 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_breakpoint);
4351 #endif
4352 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_system_call);
4353 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_threads);
4354 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_competing_signal);
4355 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_competing_stop);
4356 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_with_signal_full_sigqueue);
4357 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_system_call_entry);
4358 	ATF_TP_ADD_TC(tp,
4359 	    ptrace__PT_CONTINUE_with_signal_system_call_entry_and_exit);
4360 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_full_sigqueue);
4361 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_masked_full_sigqueue);
4362 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_change_sig);
4363 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_sigtrap_system_call_entry);
4364 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_mix);
4365 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_kqueue);
4366 	ATF_TP_ADD_TC(tp, ptrace__killed_with_sigmask);
4367 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_sigmask);
4368 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_thread_sigmask);
4369 	ATF_TP_ADD_TC(tp, ptrace__PT_REGSET);
4370 	ATF_TP_ADD_TC(tp, ptrace__parent_terminate_with_pending_sigstop1);
4371 	ATF_TP_ADD_TC(tp, ptrace__parent_terminate_with_pending_sigstop2);
4372 	ATF_TP_ADD_TC(tp, ptrace__event_mask_sigkill_discard);
4373 	ATF_TP_ADD_TC(tp, ptrace__PT_ATTACH_with_SBDRY_thread);
4374 	ATF_TP_ADD_TC(tp, ptrace__PT_STEP_with_signal);
4375 #ifdef HAVE_BREAKPOINT
4376 	ATF_TP_ADD_TC(tp, ptrace__breakpoint_siginfo);
4377 #endif
4378 	ATF_TP_ADD_TC(tp, ptrace__step_siginfo);
4379 #if defined(HAVE_BREAKPOINT) && defined(SKIP_BREAK)
4380 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_different_thread);
4381 #endif
4382 	ATF_TP_ADD_TC(tp, ptrace__PT_LWPINFO_stale_siginfo);
4383 	ATF_TP_ADD_TC(tp, ptrace__syscall_args);
4384 	ATF_TP_ADD_TC(tp, ptrace__proc_reparent);
4385 	ATF_TP_ADD_TC(tp, ptrace__procdesc_wait_child);
4386 	ATF_TP_ADD_TC(tp, ptrace__procdesc_reparent_wait_child);
4387 
4388 	return (atf_no_error());
4389 }
4390