2 * Copyright (c) 2018 Aniket Pandey
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 #include <sys/param.h>
29 #include <sys/capsicum.h>
31 #include <sys/ktrace.h>
33 #include <sys/procctl.h>
34 #include <sys/ptrace.h>
35 #include <sys/resource.h>
36 #include <sys/rtprio.h>
38 #include <sys/sysctl.h>
52 static int filedesc, status;
53 static struct pollfd fds[1];
54 static char pcregex[80];
55 static const char *auclass = "pc";
58 ATF_TC_WITH_CLEANUP(fork_success);
59 ATF_TC_HEAD(fork_success, tc)
61 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
65 ATF_TC_BODY(fork_success, tc)
68 snprintf(pcregex, sizeof(pcregex), "fork.*%d.*return,success", pid);
70 FILE *pipefd = setup(fds, auclass);
71 /* Check if fork(2) succeded. If so, exit from the child process */
72 ATF_REQUIRE((pid = fork()) != -1);
74 check_audit(fds, pcregex, pipefd);
79 ATF_TC_CLEANUP(fork_success, tc)
85 * No fork(2) in failure mode since possibilities for failure are only when
86 * user is not privileged or when the number of processes exceed KERN_MAXPROC.
90 ATF_TC_WITH_CLEANUP(_exit_success);
91 ATF_TC_HEAD(_exit_success, tc)
93 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
97 ATF_TC_BODY(_exit_success, tc)
99 FILE *pipefd = setup(fds, auclass);
100 ATF_REQUIRE((pid = fork()) != -1);
102 snprintf(pcregex, sizeof(pcregex), "exit.*%d.*success", pid);
103 check_audit(fds, pcregex, pipefd);
109 ATF_TC_CLEANUP(_exit_success, tc)
115 * _exit(2) never returns, hence the auditing by default is always successful
119 ATF_TC_WITH_CLEANUP(rfork_success);
120 ATF_TC_HEAD(rfork_success, tc)
122 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
126 ATF_TC_BODY(rfork_success, tc)
129 snprintf(pcregex, sizeof(pcregex), "rfork.*%d.*return,success", pid);
131 FILE *pipefd = setup(fds, auclass);
132 ATF_REQUIRE((pid = rfork(RFPROC)) != -1);
134 check_audit(fds, pcregex, pipefd);
139 ATF_TC_CLEANUP(rfork_success, tc)
145 ATF_TC_WITH_CLEANUP(rfork_failure);
146 ATF_TC_HEAD(rfork_failure, tc)
148 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
152 ATF_TC_BODY(rfork_failure, tc)
155 snprintf(pcregex, sizeof(pcregex), "rfork.*%d.*return,failure", pid);
157 FILE *pipefd = setup(fds, auclass);
158 /* Failure reason: Invalid argument */
159 ATF_REQUIRE_EQ(-1, rfork(-1));
160 check_audit(fds, pcregex, pipefd);
163 ATF_TC_CLEANUP(rfork_failure, tc)
169 ATF_TC_WITH_CLEANUP(wait4_success);
170 ATF_TC_HEAD(wait4_success, tc)
172 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
176 ATF_TC_BODY(wait4_success, tc)
179 snprintf(pcregex, sizeof(pcregex), "wait4.*%d.*return,success", pid);
181 ATF_REQUIRE((pid = fork()) != -1);
183 FILE *pipefd = setup(fds, auclass);
184 /* wpid = -1 : Wait for any child process */
185 ATF_REQUIRE(wait4(-1, &status, 0, NULL) != -1);
186 check_audit(fds, pcregex, pipefd);
192 ATF_TC_CLEANUP(wait4_success, tc)
198 ATF_TC_WITH_CLEANUP(wait4_failure);
199 ATF_TC_HEAD(wait4_failure, tc)
201 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
205 ATF_TC_BODY(wait4_failure, tc)
208 snprintf(pcregex, sizeof(pcregex), "wait4.*%d.*return,failure", pid);
210 FILE *pipefd = setup(fds, auclass);
211 /* Failure reason: No child process to wait for */
212 ATF_REQUIRE_EQ(-1, wait4(-1, NULL, 0, NULL));
213 check_audit(fds, pcregex, pipefd);
216 ATF_TC_CLEANUP(wait4_failure, tc)
222 ATF_TC_WITH_CLEANUP(wait6_success);
223 ATF_TC_HEAD(wait6_success, tc)
225 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
229 ATF_TC_BODY(wait6_success, tc)
232 snprintf(pcregex, sizeof(pcregex), "wait6.*%d.*return,success", pid);
234 ATF_REQUIRE((pid = fork()) != -1);
236 FILE *pipefd = setup(fds, auclass);
237 ATF_REQUIRE(wait6(P_ALL, 0, &status, WEXITED, NULL,NULL) != -1);
238 check_audit(fds, pcregex, pipefd);
244 ATF_TC_CLEANUP(wait6_success, tc)
250 ATF_TC_WITH_CLEANUP(wait6_failure);
251 ATF_TC_HEAD(wait6_failure, tc)
253 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
257 ATF_TC_BODY(wait6_failure, tc)
260 snprintf(pcregex, sizeof(pcregex), "wait6.*%d.*return,failure", pid);
262 FILE *pipefd = setup(fds, auclass);
263 /* Failure reason: Invalid argument */
264 ATF_REQUIRE_EQ(-1, wait6(0, 0, NULL, 0, NULL, NULL));
265 check_audit(fds, pcregex, pipefd);
268 ATF_TC_CLEANUP(wait6_failure, tc)
274 ATF_TC_WITH_CLEANUP(kill_success);
275 ATF_TC_HEAD(kill_success, tc)
277 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
281 ATF_TC_BODY(kill_success, tc)
284 snprintf(pcregex, sizeof(pcregex), "kill.*%d.*return,success", pid);
286 FILE *pipefd = setup(fds, auclass);
287 /* Don't send any signal to anyone, live in peace! */
288 ATF_REQUIRE_EQ(0, kill(0, 0));
289 check_audit(fds, pcregex, pipefd);
292 ATF_TC_CLEANUP(kill_success, tc)
298 ATF_TC_WITH_CLEANUP(kill_failure);
299 ATF_TC_HEAD(kill_failure, tc)
301 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
305 ATF_TC_BODY(kill_failure, tc)
308 snprintf(pcregex, sizeof(pcregex), "kill.*%d.*return,failure", pid);
310 FILE *pipefd = setup(fds, auclass);
312 * Failure reason: Non existent process with PID '-2'
313 * Note: '-1' is not used as it means sending no signal to
314 * all non-system processes: A successful invocation
316 ATF_REQUIRE_EQ(-1, kill(0, -2));
317 check_audit(fds, pcregex, pipefd);
320 ATF_TC_CLEANUP(kill_failure, tc)
326 ATF_TC_WITH_CLEANUP(chdir_success);
327 ATF_TC_HEAD(chdir_success, tc)
329 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
333 ATF_TC_BODY(chdir_success, tc)
336 snprintf(pcregex, sizeof(pcregex), "chdir.*/.*%d.*return,success", pid);
338 FILE *pipefd = setup(fds, auclass);
339 ATF_REQUIRE_EQ(0, chdir("/"));
340 check_audit(fds, pcregex, pipefd);
343 ATF_TC_CLEANUP(chdir_success, tc)
349 ATF_TC_WITH_CLEANUP(chdir_failure);
350 ATF_TC_HEAD(chdir_failure, tc)
352 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
356 ATF_TC_BODY(chdir_failure, tc)
359 snprintf(pcregex, sizeof(pcregex), "chdir.*%d.*return,failure", pid);
361 FILE *pipefd = setup(fds, auclass);
362 /* Failure reason: Bad address */
363 ATF_REQUIRE_EQ(-1, chdir(NULL));
364 check_audit(fds, pcregex, pipefd);
367 ATF_TC_CLEANUP(chdir_failure, tc)
373 ATF_TC_WITH_CLEANUP(fchdir_success);
374 ATF_TC_HEAD(fchdir_success, tc)
376 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
380 ATF_TC_BODY(fchdir_success, tc)
382 /* Build an absolute path to the test-case directory */
384 ATF_REQUIRE(getcwd(dirpath, sizeof(dirpath)) != NULL);
385 ATF_REQUIRE((filedesc = open(dirpath, O_RDONLY)) != -1);
387 /* Audit record generated by fchdir(2) does not contain filedesc */
389 snprintf(pcregex, sizeof(pcregex), "fchdir.*%d.*return,success", pid);
391 FILE *pipefd = setup(fds, auclass);
392 ATF_REQUIRE_EQ(0, fchdir(filedesc));
393 check_audit(fds, pcregex, pipefd);
397 ATF_TC_CLEANUP(fchdir_success, tc)
403 ATF_TC_WITH_CLEANUP(fchdir_failure);
404 ATF_TC_HEAD(fchdir_failure, tc)
406 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
410 ATF_TC_BODY(fchdir_failure, tc)
413 snprintf(pcregex, sizeof(pcregex), "fchdir.*%d.*return,failure", pid);
415 FILE *pipefd = setup(fds, auclass);
416 /* Failure reason: Bad directory address */
417 ATF_REQUIRE_EQ(-1, fchdir(-1));
418 check_audit(fds, pcregex, pipefd);
421 ATF_TC_CLEANUP(fchdir_failure, tc)
427 ATF_TC_WITH_CLEANUP(chroot_success);
428 ATF_TC_HEAD(chroot_success, tc)
430 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
434 ATF_TC_BODY(chroot_success, tc)
437 snprintf(pcregex, sizeof(pcregex), "chroot.*%d.*return,success", pid);
439 FILE *pipefd = setup(fds, auclass);
440 /* We don't want to change the root directory, hence '/' */
441 ATF_REQUIRE_EQ(0, chroot("/"));
442 check_audit(fds, pcregex, pipefd);
445 ATF_TC_CLEANUP(chroot_success, tc)
451 ATF_TC_WITH_CLEANUP(chroot_failure);
452 ATF_TC_HEAD(chroot_failure, tc)
454 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
458 ATF_TC_BODY(chroot_failure, tc)
461 snprintf(pcregex, sizeof(pcregex), "chroot.*%d.*return,failure", pid);
463 FILE *pipefd = setup(fds, auclass);
464 ATF_REQUIRE_EQ(-1, chroot(NULL));
465 check_audit(fds, pcregex, pipefd);
468 ATF_TC_CLEANUP(chroot_failure, tc)
474 ATF_TC_WITH_CLEANUP(umask_success);
475 ATF_TC_HEAD(umask_success, tc)
477 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
481 ATF_TC_BODY(umask_success, tc)
484 snprintf(pcregex, sizeof(pcregex), "umask.*%d.*return,success", pid);
486 FILE *pipefd = setup(fds, auclass);
488 check_audit(fds, pcregex, pipefd);
491 ATF_TC_CLEANUP(umask_success, tc)
497 * umask(2) system call never fails. Hence, no test case for failure mode
501 ATF_TC_WITH_CLEANUP(setuid_success);
502 ATF_TC_HEAD(setuid_success, tc)
504 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
508 ATF_TC_BODY(setuid_success, tc)
511 snprintf(pcregex, sizeof(pcregex), "setuid.*%d.*return,success", pid);
513 FILE *pipefd = setup(fds, auclass);
514 /* Since we're privileged, we'll let ourselves be privileged! */
515 ATF_REQUIRE_EQ(0, setuid(0));
516 check_audit(fds, pcregex, pipefd);
519 ATF_TC_CLEANUP(setuid_success, tc)
525 * setuid(2) fails only when the current user is not root. So no test case for
526 * failure mode since the required_user="root"
530 ATF_TC_WITH_CLEANUP(seteuid_success);
531 ATF_TC_HEAD(seteuid_success, tc)
533 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
537 ATF_TC_BODY(seteuid_success, tc)
540 snprintf(pcregex, sizeof(pcregex), "seteuid.*%d.*return,success", pid);
542 FILE *pipefd = setup(fds, auclass);
543 /* This time, we'll let ourselves be 'effectively' privileged! */
544 ATF_REQUIRE_EQ(0, seteuid(0));
545 check_audit(fds, pcregex, pipefd);
548 ATF_TC_CLEANUP(seteuid_success, tc)
554 * seteuid(2) fails only when the current user is not root. So no test case for
555 * failure mode since the required_user="root"
559 ATF_TC_WITH_CLEANUP(setgid_success);
560 ATF_TC_HEAD(setgid_success, tc)
562 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
566 ATF_TC_BODY(setgid_success, tc)
569 snprintf(pcregex, sizeof(pcregex), "setgid.*%d.*return,success", pid);
571 FILE *pipefd = setup(fds, auclass);
572 ATF_REQUIRE_EQ(0, setgid(0));
573 check_audit(fds, pcregex, pipefd);
576 ATF_TC_CLEANUP(setgid_success, tc)
582 * setgid(2) fails only when the current user is not root. So no test case for
583 * failure mode since the required_user="root"
587 ATF_TC_WITH_CLEANUP(setegid_success);
588 ATF_TC_HEAD(setegid_success, tc)
590 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
594 ATF_TC_BODY(setegid_success, tc)
597 snprintf(pcregex, sizeof(pcregex), "setegid.*%d.*return,success", pid);
599 FILE *pipefd = setup(fds, auclass);
600 ATF_REQUIRE_EQ(0, setegid(0));
601 check_audit(fds, pcregex, pipefd);
604 ATF_TC_CLEANUP(setegid_success, tc)
610 * setegid(2) fails only when the current user is not root. So no test case for
611 * failure mode since the required_user="root"
615 ATF_TC_WITH_CLEANUP(setregid_success);
616 ATF_TC_HEAD(setregid_success, tc)
618 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
622 ATF_TC_BODY(setregid_success, tc)
625 snprintf(pcregex, sizeof(pcregex), "setregid.*%d.*return,success", pid);
627 FILE *pipefd = setup(fds, auclass);
628 /* setregid(-1, -1) does not change any real or effective GIDs */
629 ATF_REQUIRE_EQ(0, setregid(-1, -1));
630 check_audit(fds, pcregex, pipefd);
633 ATF_TC_CLEANUP(setregid_success, tc)
639 * setregid(2) fails only when the current user is not root. So no test case for
640 * failure mode since the required_user="root"
644 ATF_TC_WITH_CLEANUP(setreuid_success);
645 ATF_TC_HEAD(setreuid_success, tc)
647 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
651 ATF_TC_BODY(setreuid_success, tc)
654 snprintf(pcregex, sizeof(pcregex), "setreuid.*%d.*return,success", pid);
656 FILE *pipefd = setup(fds, auclass);
657 /* setreuid(-1, -1) does not change any real or effective UIDs */
658 ATF_REQUIRE_EQ(0, setreuid(-1, -1));
659 check_audit(fds, pcregex, pipefd);
662 ATF_TC_CLEANUP(setreuid_success, tc)
668 * setregid(2) fails only when the current user is not root. So no test case for
669 * failure mode since the required_user="root"
673 ATF_TC_WITH_CLEANUP(setresuid_success);
674 ATF_TC_HEAD(setresuid_success, tc)
676 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
677 "setresuid(2) call");
680 ATF_TC_BODY(setresuid_success, tc)
683 snprintf(pcregex, sizeof(pcregex), "setresuid.*%d.*return,success", pid);
685 FILE *pipefd = setup(fds, auclass);
686 /* setresuid(-1, -1, -1) does not change real, effective & saved UIDs */
687 ATF_REQUIRE_EQ(0, setresuid(-1, -1, -1));
688 check_audit(fds, pcregex, pipefd);
691 ATF_TC_CLEANUP(setresuid_success, tc)
697 * setresuid(2) fails only when the current user is not root. So no test case
698 * for failure mode since the required_user="root"
702 ATF_TC_WITH_CLEANUP(setresgid_success);
703 ATF_TC_HEAD(setresgid_success, tc)
705 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
706 "setresgid(2) call");
709 ATF_TC_BODY(setresgid_success, tc)
712 snprintf(pcregex, sizeof(pcregex), "setresgid.*%d.*ret.*success", pid);
714 FILE *pipefd = setup(fds, auclass);
715 /* setresgid(-1, -1, -1) does not change real, effective & saved GIDs */
716 ATF_REQUIRE_EQ(0, setresgid(-1, -1, -1));
717 check_audit(fds, pcregex, pipefd);
720 ATF_TC_CLEANUP(setresgid_success, tc)
726 * setresgid(2) fails only when the current user is not root. So no test case
727 * for failure mode since the required_user="root"
731 ATF_TC_WITH_CLEANUP(getresuid_success);
732 ATF_TC_HEAD(getresuid_success, tc)
734 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
735 "getresuid(2) call");
738 ATF_TC_BODY(getresuid_success, tc)
741 snprintf(pcregex, sizeof(pcregex), "getresuid.*%d.*ret.*success", pid);
743 FILE *pipefd = setup(fds, auclass);
744 ATF_REQUIRE_EQ(0, getresuid(NULL, NULL, NULL));
745 check_audit(fds, pcregex, pipefd);
748 ATF_TC_CLEANUP(getresuid_success, tc)
754 ATF_TC_WITH_CLEANUP(getresuid_failure);
755 ATF_TC_HEAD(getresuid_failure, tc)
757 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
758 "getresuid(2) call");
761 ATF_TC_BODY(getresuid_failure, tc)
764 snprintf(pcregex, sizeof(pcregex), "getresuid.*%d.*ret.*failure", pid);
766 FILE *pipefd = setup(fds, auclass);
767 /* Failure reason: Invalid address "-1" */
768 ATF_REQUIRE_EQ(-1, getresuid((uid_t *)-1, NULL, NULL));
769 check_audit(fds, pcregex, pipefd);
772 ATF_TC_CLEANUP(getresuid_failure, tc)
778 ATF_TC_WITH_CLEANUP(getresgid_success);
779 ATF_TC_HEAD(getresgid_success, tc)
781 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
782 "getresgid(2) call");
785 ATF_TC_BODY(getresgid_success, tc)
788 snprintf(pcregex, sizeof(pcregex), "getresgid.*%d.*ret.*success", pid);
790 FILE *pipefd = setup(fds, auclass);
791 ATF_REQUIRE_EQ(0, getresgid(NULL, NULL, NULL));
792 check_audit(fds, pcregex, pipefd);
795 ATF_TC_CLEANUP(getresgid_success, tc)
801 ATF_TC_WITH_CLEANUP(getresgid_failure);
802 ATF_TC_HEAD(getresgid_failure, tc)
804 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
805 "getresgid(2) call");
808 ATF_TC_BODY(getresgid_failure, tc)
811 snprintf(pcregex, sizeof(pcregex), "getresgid.*%d.*ret.*failure", pid);
813 FILE *pipefd = setup(fds, auclass);
814 /* Failure reason: Invalid address "-1" */
815 ATF_REQUIRE_EQ(-1, getresgid((gid_t *)-1, NULL, NULL));
816 check_audit(fds, pcregex, pipefd);
819 ATF_TC_CLEANUP(getresgid_failure, tc)
825 ATF_TC_WITH_CLEANUP(setpriority_success);
826 ATF_TC_HEAD(setpriority_success, tc)
828 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
829 "setpriority(2) call");
832 ATF_TC_BODY(setpriority_success, tc)
835 snprintf(pcregex, sizeof(pcregex), "setpriority.*%d.*success", pid);
837 FILE *pipefd = setup(fds, auclass);
838 ATF_REQUIRE_EQ(0, setpriority(PRIO_PROCESS, 0, 0));
839 check_audit(fds, pcregex, pipefd);
842 ATF_TC_CLEANUP(setpriority_success, tc)
848 ATF_TC_WITH_CLEANUP(setpriority_failure);
849 ATF_TC_HEAD(setpriority_failure, tc)
851 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
852 "setpriority(2) call");
855 ATF_TC_BODY(setpriority_failure, tc)
858 snprintf(pcregex, sizeof(pcregex), "setpriority.*%d.*failure", pid);
860 FILE *pipefd = setup(fds, auclass);
861 ATF_REQUIRE_EQ(-1, setpriority(-1, -1, -1));
862 check_audit(fds, pcregex, pipefd);
865 ATF_TC_CLEANUP(setpriority_failure, tc)
871 ATF_TC_WITH_CLEANUP(setgroups_success);
872 ATF_TC_HEAD(setgroups_success, tc)
874 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
875 "setgroups(2) call");
878 ATF_TC_BODY(setgroups_success, tc)
882 snprintf(pcregex, sizeof(pcregex), "setgroups.*%d.*ret.*success", pid);
883 /* Retrieve the current group access list to be used with setgroups */
884 ATF_REQUIRE(getgroups(sizeof(gids)/sizeof(gids[0]), gids) != -1);
886 FILE *pipefd = setup(fds, auclass);
887 ATF_REQUIRE_EQ(0, setgroups(sizeof(gids)/sizeof(gids[0]), gids));
888 check_audit(fds, pcregex, pipefd);
891 ATF_TC_CLEANUP(setgroups_success, tc)
897 ATF_TC_WITH_CLEANUP(setgroups_failure);
898 ATF_TC_HEAD(setgroups_failure, tc)
900 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
901 "setgroups(2) call");
904 ATF_TC_BODY(setgroups_failure, tc)
907 snprintf(pcregex, sizeof(pcregex), "setgroups.*%d.*ret.*failure", pid);
909 FILE *pipefd = setup(fds, auclass);
910 ATF_REQUIRE_EQ(-1, setgroups(-1, NULL));
911 check_audit(fds, pcregex, pipefd);
914 ATF_TC_CLEANUP(setgroups_failure, tc)
920 ATF_TC_WITH_CLEANUP(setpgrp_success);
921 ATF_TC_HEAD(setpgrp_success, tc)
923 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
927 ATF_TC_BODY(setpgrp_success, tc)
929 /* Main procedure is carried out from within the child process */
930 ATF_REQUIRE((pid = fork()) != -1);
932 ATF_REQUIRE(wait(&status) != -1);
935 snprintf(pcregex, sizeof(pcregex), "setpgrp.*%d.*success", pid);
937 FILE *pipefd = setup(fds, auclass);
938 ATF_REQUIRE_EQ(0, setpgrp(0, 0));
939 check_audit(fds, pcregex, pipefd);
943 ATF_TC_CLEANUP(setpgrp_success, tc)
949 ATF_TC_WITH_CLEANUP(setpgrp_failure);
950 ATF_TC_HEAD(setpgrp_failure, tc)
952 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
956 ATF_TC_BODY(setpgrp_failure, tc)
959 snprintf(pcregex, sizeof(pcregex), "setpgrp.*%d.*return,failure", pid);
961 FILE *pipefd = setup(fds, auclass);
962 ATF_REQUIRE_EQ(-1, setpgrp(-1, -1));
963 check_audit(fds, pcregex, pipefd);
966 ATF_TC_CLEANUP(setpgrp_failure, tc)
972 ATF_TC_WITH_CLEANUP(setsid_success);
973 ATF_TC_HEAD(setsid_success, tc)
975 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
979 ATF_TC_BODY(setsid_success, tc)
981 /* Main procedure is carried out from within the child process */
982 ATF_REQUIRE((pid = fork()) != -1);
984 ATF_REQUIRE(wait(&status) != -1);
987 snprintf(pcregex, sizeof(pcregex), "setsid.*%d.*success", pid);
989 FILE *pipefd = setup(fds, auclass);
990 ATF_REQUIRE(setsid() != -1);
991 check_audit(fds, pcregex, pipefd);
995 ATF_TC_CLEANUP(setsid_success, tc)
1001 ATF_TC_WITH_CLEANUP(setsid_failure);
1002 ATF_TC_HEAD(setsid_failure, tc)
1004 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1008 ATF_TC_BODY(setsid_failure, tc)
1011 snprintf(pcregex, sizeof(pcregex), "setsid.*%d.*return,failure", pid);
1014 * Here, we are intentionally ignoring the output of the setsid()
1015 * call because it may or may not be a process leader already. But it
1016 * ensures that the next invocation of setsid() will definitely fail.
1019 FILE *pipefd = setup(fds, auclass);
1021 * Failure reason: [EPERM] Creating a new session is not permitted
1022 * as the PID of calling process matches the PGID of a process group
1023 * created by premature setsid() call.
1025 ATF_REQUIRE_EQ(-1, setsid());
1026 check_audit(fds, pcregex, pipefd);
1029 ATF_TC_CLEANUP(setsid_failure, tc)
1035 ATF_TC_WITH_CLEANUP(setrlimit_success);
1036 ATF_TC_HEAD(setrlimit_success, tc)
1038 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1039 "setrlimit(2) call");
1042 ATF_TC_BODY(setrlimit_success, tc)
1046 snprintf(pcregex, sizeof(pcregex), "setrlimit.*%d.*ret.*success", pid);
1047 /* Retrieve the system resource consumption limit to be used later on */
1048 ATF_REQUIRE_EQ(0, getrlimit(RLIMIT_FSIZE, &rlp));
1050 FILE *pipefd = setup(fds, auclass);
1051 ATF_REQUIRE_EQ(0, setrlimit(RLIMIT_FSIZE, &rlp));
1052 check_audit(fds, pcregex, pipefd);
1055 ATF_TC_CLEANUP(setrlimit_success, tc)
1061 ATF_TC_WITH_CLEANUP(setrlimit_failure);
1062 ATF_TC_HEAD(setrlimit_failure, tc)
1064 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1065 "setrlimit(2) call");
1068 ATF_TC_BODY(setrlimit_failure, tc)
1071 snprintf(pcregex, sizeof(pcregex), "setrlimit.*%d.*ret.*failure", pid);
1073 FILE *pipefd = setup(fds, auclass);
1074 ATF_REQUIRE_EQ(-1, setrlimit(RLIMIT_FSIZE, NULL));
1075 check_audit(fds, pcregex, pipefd);
1078 ATF_TC_CLEANUP(setrlimit_failure, tc)
1084 ATF_TC_WITH_CLEANUP(mlock_success);
1085 ATF_TC_HEAD(mlock_success, tc)
1087 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1091 ATF_TC_BODY(mlock_success, tc)
1094 snprintf(pcregex, sizeof(pcregex), "mlock.*%d.*return,success", pid);
1096 FILE *pipefd = setup(fds, auclass);
1097 ATF_REQUIRE_EQ(0, mlock(NULL, 0));
1098 check_audit(fds, pcregex, pipefd);
1101 ATF_TC_CLEANUP(mlock_success, tc)
1107 ATF_TC_WITH_CLEANUP(mlock_failure);
1108 ATF_TC_HEAD(mlock_failure, tc)
1110 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1114 ATF_TC_BODY(mlock_failure, tc)
1117 snprintf(pcregex, sizeof(pcregex), "mlock.*%d.*return,failure", pid);
1119 FILE *pipefd = setup(fds, auclass);
1120 ATF_REQUIRE_EQ(-1, mlock((void *)(-1), -1));
1121 check_audit(fds, pcregex, pipefd);
1124 ATF_TC_CLEANUP(mlock_failure, tc)
1130 ATF_TC_WITH_CLEANUP(munlock_success);
1131 ATF_TC_HEAD(munlock_success, tc)
1133 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1137 ATF_TC_BODY(munlock_success, tc)
1140 snprintf(pcregex, sizeof(pcregex), "munlock.*%d.*return,success", pid);
1142 FILE *pipefd = setup(fds, auclass);
1143 ATF_REQUIRE_EQ(0, munlock(NULL, 0));
1144 check_audit(fds, pcregex, pipefd);
1147 ATF_TC_CLEANUP(munlock_success, tc)
1153 ATF_TC_WITH_CLEANUP(munlock_failure);
1154 ATF_TC_HEAD(munlock_failure, tc)
1156 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1160 ATF_TC_BODY(munlock_failure, tc)
1163 snprintf(pcregex, sizeof(pcregex), "munlock.*%d.*return,failure", pid);
1165 FILE *pipefd = setup(fds, auclass);
1166 ATF_REQUIRE_EQ(-1, munlock((void *)(-1), -1));
1167 check_audit(fds, pcregex, pipefd);
1170 ATF_TC_CLEANUP(munlock_failure, tc)
1176 ATF_TC_WITH_CLEANUP(minherit_success);
1177 ATF_TC_HEAD(minherit_success, tc)
1179 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1180 "minherit(2) call");
1183 ATF_TC_BODY(minherit_success, tc)
1186 snprintf(pcregex, sizeof(pcregex), "minherit.*%d.*return,success", pid);
1188 FILE *pipefd = setup(fds, auclass);
1189 ATF_REQUIRE_EQ(0, minherit(NULL, 0, INHERIT_ZERO));
1190 check_audit(fds, pcregex, pipefd);
1193 ATF_TC_CLEANUP(minherit_success, tc)
1199 ATF_TC_WITH_CLEANUP(minherit_failure);
1200 ATF_TC_HEAD(minherit_failure, tc)
1202 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1203 "minherit(2) call");
1206 ATF_TC_BODY(minherit_failure, tc)
1209 snprintf(pcregex, sizeof(pcregex), "minherit.*%d.*return,failure", pid);
1211 FILE *pipefd = setup(fds, auclass);
1212 ATF_REQUIRE_EQ(-1, minherit((void *)(-1), -1, 0));
1213 check_audit(fds, pcregex, pipefd);
1216 ATF_TC_CLEANUP(minherit_failure, tc)
1222 ATF_TC_WITH_CLEANUP(setlogin_success);
1223 ATF_TC_HEAD(setlogin_success, tc)
1225 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1226 "setlogin(2) call");
1229 ATF_TC_BODY(setlogin_success, tc)
1233 snprintf(pcregex, sizeof(pcregex), "setlogin.*%d.*return,success", pid);
1235 /* Retrieve the current user's login name to be used with setlogin(2) */
1236 ATF_REQUIRE((name = getlogin()) != NULL);
1237 FILE *pipefd = setup(fds, auclass);
1238 ATF_REQUIRE_EQ(0, setlogin(name));
1239 check_audit(fds, pcregex, pipefd);
1242 ATF_TC_CLEANUP(setlogin_success, tc)
1248 ATF_TC_WITH_CLEANUP(setlogin_failure);
1249 ATF_TC_HEAD(setlogin_failure, tc)
1251 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1252 "setlogin(2) call");
1255 ATF_TC_BODY(setlogin_failure, tc)
1258 snprintf(pcregex, sizeof(pcregex), "setlogin.*%d.*return,failure", pid);
1260 FILE *pipefd = setup(fds, auclass);
1261 ATF_REQUIRE_EQ(-1, setlogin(NULL));
1262 check_audit(fds, pcregex, pipefd);
1265 ATF_TC_CLEANUP(setlogin_failure, tc)
1271 ATF_TC_WITH_CLEANUP(rtprio_success);
1272 ATF_TC_HEAD(rtprio_success, tc)
1274 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1278 ATF_TC_BODY(rtprio_success, tc)
1282 snprintf(pcregex, sizeof(pcregex), "rtprio.*%d.*return,success", pid);
1284 FILE *pipefd = setup(fds, auclass);
1285 ATF_REQUIRE_EQ(0, rtprio(RTP_LOOKUP, 0, &rtp));
1286 check_audit(fds, pcregex, pipefd);
1289 ATF_TC_CLEANUP(rtprio_success, tc)
1295 ATF_TC_WITH_CLEANUP(rtprio_failure);
1296 ATF_TC_HEAD(rtprio_failure, tc)
1298 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1302 ATF_TC_BODY(rtprio_failure, tc)
1305 snprintf(pcregex, sizeof(pcregex), "rtprio.*%d.*return,failure", pid);
1307 FILE *pipefd = setup(fds, auclass);
1308 ATF_REQUIRE_EQ(-1, rtprio(-1, -1, NULL));
1309 check_audit(fds, pcregex, pipefd);
1312 ATF_TC_CLEANUP(rtprio_failure, tc)
1318 ATF_TC_WITH_CLEANUP(profil_success);
1319 ATF_TC_HEAD(profil_success, tc)
1321 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1325 ATF_TC_BODY(profil_success, tc)
1328 snprintf(pcregex, sizeof(pcregex), "profil.*%d.*return,success", pid);
1331 FILE *pipefd = setup(fds, auclass);
1332 /* Set scale argument as 0 to disable profiling of current process */
1333 ATF_REQUIRE_EQ(0, profil(samples, sizeof(samples), 0, 0));
1334 check_audit(fds, pcregex, pipefd);
1337 ATF_TC_CLEANUP(profil_success, tc)
1343 ATF_TC_WITH_CLEANUP(profil_failure);
1344 ATF_TC_HEAD(profil_failure, tc)
1346 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1350 ATF_TC_BODY(profil_failure, tc)
1353 snprintf(pcregex, sizeof(pcregex), "profil.*%d.*return,failure", pid);
1355 FILE *pipefd = setup(fds, auclass);
1356 ATF_REQUIRE_EQ(-1, profil((char *)(SIZE_MAX), -1, -1, -1));
1357 check_audit(fds, pcregex, pipefd);
1360 ATF_TC_CLEANUP(profil_failure, tc)
1366 ATF_TC_WITH_CLEANUP(ptrace_success);
1367 ATF_TC_HEAD(ptrace_success, tc)
1369 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1373 ATF_TC_BODY(ptrace_success, tc)
1376 snprintf(pcregex, sizeof(pcregex), "ptrace.*%d.*return,success", pid);
1378 FILE *pipefd = setup(fds, auclass);
1379 ATF_REQUIRE_EQ(0, ptrace(PT_TRACE_ME, 0, NULL, 0));
1380 check_audit(fds, pcregex, pipefd);
1383 ATF_TC_CLEANUP(ptrace_success, tc)
1389 ATF_TC_WITH_CLEANUP(ptrace_failure);
1390 ATF_TC_HEAD(ptrace_failure, tc)
1392 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1396 ATF_TC_BODY(ptrace_failure, tc)
1399 snprintf(pcregex, sizeof(pcregex), "ptrace.*%d.*return,failure", pid);
1401 FILE *pipefd = setup(fds, auclass);
1402 ATF_REQUIRE_EQ(-1, ptrace(-1, 0, NULL, 0));
1403 check_audit(fds, pcregex, pipefd);
1406 ATF_TC_CLEANUP(ptrace_failure, tc)
1412 ATF_TC_WITH_CLEANUP(ktrace_success);
1413 ATF_TC_HEAD(ktrace_success, tc)
1415 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1419 ATF_TC_BODY(ktrace_success, tc)
1422 snprintf(pcregex, sizeof(pcregex), "ktrace.*%d.*return,success", pid);
1424 FILE *pipefd = setup(fds, auclass);
1425 ATF_REQUIRE_EQ(0, ktrace(NULL, KTROP_CLEAR, KTRFAC_SYSCALL, pid));
1426 check_audit(fds, pcregex, pipefd);
1429 ATF_TC_CLEANUP(ktrace_success, tc)
1435 ATF_TC_WITH_CLEANUP(ktrace_failure);
1436 ATF_TC_HEAD(ktrace_failure, tc)
1438 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1442 ATF_TC_BODY(ktrace_failure, tc)
1445 snprintf(pcregex, sizeof(pcregex), "ktrace.*%d.*return,failure", pid);
1447 FILE *pipefd = setup(fds, auclass);
1448 ATF_REQUIRE_EQ(-1, ktrace(NULL, -1, -1, 0));
1449 check_audit(fds, pcregex, pipefd);
1452 ATF_TC_CLEANUP(ktrace_failure, tc)
1458 ATF_TC_WITH_CLEANUP(procctl_success);
1459 ATF_TC_HEAD(procctl_success, tc)
1461 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1465 ATF_TC_BODY(procctl_success, tc)
1468 snprintf(pcregex, sizeof(pcregex), "procctl.*%d.*return,success", pid);
1470 struct procctl_reaper_status reapstat;
1471 FILE *pipefd = setup(fds, auclass);
1472 /* Retrieve information about the reaper of current process (pid) */
1473 ATF_REQUIRE_EQ(0, procctl(P_PID, pid, PROC_REAP_STATUS, &reapstat));
1474 check_audit(fds, pcregex, pipefd);
1477 ATF_TC_CLEANUP(procctl_success, tc)
1483 ATF_TC_WITH_CLEANUP(procctl_failure);
1484 ATF_TC_HEAD(procctl_failure, tc)
1486 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1490 ATF_TC_BODY(procctl_failure, tc)
1493 snprintf(pcregex, sizeof(pcregex), "procctl.*%d.*return,failure", pid);
1495 FILE *pipefd = setup(fds, auclass);
1496 ATF_REQUIRE_EQ(-1, procctl(-1, -1, -1, NULL));
1497 check_audit(fds, pcregex, pipefd);
1500 ATF_TC_CLEANUP(procctl_failure, tc)
1506 ATF_TC_WITH_CLEANUP(cap_enter_success);
1507 ATF_TC_HEAD(cap_enter_success, tc)
1509 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1510 "cap_enter(2) call");
1513 ATF_TC_BODY(cap_enter_success, tc)
1516 size_t len = sizeof(capinfo);
1517 const char *capname = "kern.features.security_capability_mode";
1518 ATF_REQUIRE_EQ(0, sysctlbyname(capname, &capinfo, &len, NULL, 0));
1520 /* Without CAPABILITY_MODE enabled, cap_enter() returns ENOSYS */
1522 atf_tc_skip("Capsicum is not enabled in the system");
1524 FILE *pipefd = setup(fds, auclass);
1525 ATF_REQUIRE((pid = fork()) != -1);
1527 snprintf(pcregex, sizeof(pcregex),
1528 "cap_enter.*%d.*return,success", pid);
1529 ATF_REQUIRE(wait(&status) != -1);
1530 check_audit(fds, pcregex, pipefd);
1533 ATF_REQUIRE_EQ(0, cap_enter());
1538 ATF_TC_CLEANUP(cap_enter_success, tc)
1544 ATF_TC_WITH_CLEANUP(cap_getmode_success);
1545 ATF_TC_HEAD(cap_getmode_success, tc)
1547 atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "
1548 "cap_getmode(2) call");
1551 ATF_TC_BODY(cap_getmode_success, tc)
1554 size_t len = sizeof(capinfo);
1555 const char *capname = "kern.features.security_capability_mode";
1556 ATF_REQUIRE_EQ(0, sysctlbyname(capname, &capinfo, &len, NULL, 0));
1558 /* Without CAPABILITY_MODE enabled, cap_getmode() returns ENOSYS */
1560 atf_tc_skip("Capsicum is not enabled in the system");
1563 snprintf(pcregex, sizeof(pcregex), "cap_getmode.*%d.*success", pid);
1565 FILE *pipefd = setup(fds, auclass);
1566 ATF_REQUIRE_EQ(0, cap_getmode(&modep));
1567 check_audit(fds, pcregex, pipefd);
1570 ATF_TC_CLEANUP(cap_getmode_success, tc)
1576 ATF_TC_WITH_CLEANUP(cap_getmode_failure);
1577 ATF_TC_HEAD(cap_getmode_failure, tc)
1579 atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "
1580 "cap_getmode(2) call");
1583 ATF_TC_BODY(cap_getmode_failure, tc)
1586 snprintf(pcregex, sizeof(pcregex), "cap_getmode.*%d.*failure", pid);
1588 FILE *pipefd = setup(fds, auclass);
1589 /* cap_getmode(2) can either fail with EFAULT or ENOSYS */
1590 ATF_REQUIRE_EQ(-1, cap_getmode(NULL));
1591 check_audit(fds, pcregex, pipefd);
1594 ATF_TC_CLEANUP(cap_getmode_failure, tc)
1602 ATF_TP_ADD_TC(tp, fork_success);
1603 ATF_TP_ADD_TC(tp, _exit_success);
1604 ATF_TP_ADD_TC(tp, rfork_success);
1605 ATF_TP_ADD_TC(tp, rfork_failure);
1607 ATF_TP_ADD_TC(tp, wait4_success);
1608 ATF_TP_ADD_TC(tp, wait4_failure);
1609 ATF_TP_ADD_TC(tp, wait6_success);
1610 ATF_TP_ADD_TC(tp, wait6_failure);
1611 ATF_TP_ADD_TC(tp, kill_success);
1612 ATF_TP_ADD_TC(tp, kill_failure);
1614 ATF_TP_ADD_TC(tp, chdir_success);
1615 ATF_TP_ADD_TC(tp, chdir_failure);
1616 ATF_TP_ADD_TC(tp, fchdir_success);
1617 ATF_TP_ADD_TC(tp, fchdir_failure);
1618 ATF_TP_ADD_TC(tp, chroot_success);
1619 ATF_TP_ADD_TC(tp, chroot_failure);
1621 ATF_TP_ADD_TC(tp, umask_success);
1622 ATF_TP_ADD_TC(tp, setuid_success);
1623 ATF_TP_ADD_TC(tp, seteuid_success);
1624 ATF_TP_ADD_TC(tp, setgid_success);
1625 ATF_TP_ADD_TC(tp, setegid_success);
1627 ATF_TP_ADD_TC(tp, setreuid_success);
1628 ATF_TP_ADD_TC(tp, setregid_success);
1629 ATF_TP_ADD_TC(tp, setresuid_success);
1630 ATF_TP_ADD_TC(tp, setresgid_success);
1632 ATF_TP_ADD_TC(tp, getresuid_success);
1633 ATF_TP_ADD_TC(tp, getresuid_failure);
1634 ATF_TP_ADD_TC(tp, getresgid_success);
1635 ATF_TP_ADD_TC(tp, getresgid_failure);
1637 ATF_TP_ADD_TC(tp, setpriority_success);
1638 ATF_TP_ADD_TC(tp, setpriority_failure);
1639 ATF_TP_ADD_TC(tp, setgroups_success);
1640 ATF_TP_ADD_TC(tp, setgroups_failure);
1641 ATF_TP_ADD_TC(tp, setpgrp_success);
1642 ATF_TP_ADD_TC(tp, setpgrp_failure);
1643 ATF_TP_ADD_TC(tp, setsid_success);
1644 ATF_TP_ADD_TC(tp, setsid_failure);
1645 ATF_TP_ADD_TC(tp, setrlimit_success);
1646 ATF_TP_ADD_TC(tp, setrlimit_failure);
1648 ATF_TP_ADD_TC(tp, mlock_success);
1649 ATF_TP_ADD_TC(tp, mlock_failure);
1650 ATF_TP_ADD_TC(tp, munlock_success);
1651 ATF_TP_ADD_TC(tp, munlock_failure);
1652 ATF_TP_ADD_TC(tp, minherit_success);
1653 ATF_TP_ADD_TC(tp, minherit_failure);
1655 ATF_TP_ADD_TC(tp, setlogin_success);
1656 ATF_TP_ADD_TC(tp, setlogin_failure);
1657 ATF_TP_ADD_TC(tp, rtprio_success);
1658 ATF_TP_ADD_TC(tp, rtprio_failure);
1660 ATF_TP_ADD_TC(tp, profil_success);
1661 ATF_TP_ADD_TC(tp, profil_failure);
1662 ATF_TP_ADD_TC(tp, ptrace_success);
1663 ATF_TP_ADD_TC(tp, ptrace_failure);
1664 ATF_TP_ADD_TC(tp, ktrace_success);
1665 ATF_TP_ADD_TC(tp, ktrace_failure);
1666 ATF_TP_ADD_TC(tp, procctl_success);
1667 ATF_TP_ADD_TC(tp, procctl_failure);
1669 ATF_TP_ADD_TC(tp, cap_enter_success);
1670 ATF_TP_ADD_TC(tp, cap_getmode_success);
1671 ATF_TP_ADD_TC(tp, cap_getmode_failure);
1673 return (atf_no_error());