Path: blob/main/tests/sys/audit/process-control.c
102879 views
/*-1* Copyright (c) 2018 Aniket Pandey2*3* Redistribution and use in source and binary forms, with or without4* modification, are permitted provided that the following conditions5* are met:6* 1. Redistributions of source code must retain the above copyright7* notice, this list of conditions and the following disclaimer.8* 2. Redistributions in binary form must reproduce the above copyright9* notice, this list of conditions and the following disclaimer in the10* documentation and/or other materials provided with the distribution.11*12* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND13* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE14* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE15* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE16* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL17* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS18* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF19* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)20* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT21* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY22* SUCH DAMAGE.23*/2425#include <sys/param.h>26#include <sys/capsicum.h>27#include <sys/uio.h>28#include <sys/ktrace.h>29#include <sys/mman.h>30#include <sys/procctl.h>31#include <sys/ptrace.h>32#include <sys/resource.h>33#include <sys/rtprio.h>34#include <sys/stat.h>35#include <sys/sysctl.h>36#include <sys/time.h>37#include <sys/wait.h>3839#include <atf-c.h>40#include <fcntl.h>41#include <signal.h>42#include <stdint.h>43#include <stdlib.h>44#include <unistd.h>4546#include "utils.h"4748#include "freebsd_test_suite/macros.h"4950static pid_t pid;51static int filedesc, status;52static struct pollfd fds[1];53static char pcregex[80];54static const char *auclass = "pc";555657ATF_TC_WITH_CLEANUP(fork_success);58ATF_TC_HEAD(fork_success, tc)59{60atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "61"fork(2) call");62}6364ATF_TC_BODY(fork_success, tc)65{66pid = getpid();67snprintf(pcregex, sizeof(pcregex), "fork.*%d.*return,success", pid);6869FILE *pipefd = setup(fds, auclass);70/* Check if fork(2) succeded. If so, exit from the child process */71ATF_REQUIRE((pid = fork()) != -1);72if (pid)73check_audit(fds, pcregex, pipefd);74else75_exit(0);76}7778ATF_TC_CLEANUP(fork_success, tc)79{80cleanup();81}8283/*84* No fork(2) in failure mode since possibilities for failure are only when85* user is not privileged or when the number of processes exceed KERN_MAXPROC.86*/878889ATF_TC_WITH_CLEANUP(_exit_success);90ATF_TC_HEAD(_exit_success, tc)91{92atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "93"_exit(2) call");94}9596ATF_TC_BODY(_exit_success, tc)97{98FILE *pipefd = setup(fds, auclass);99ATF_REQUIRE((pid = fork()) != -1);100if (pid) {101snprintf(pcregex, sizeof(pcregex), "exit.*%d.*success", pid);102check_audit(fds, pcregex, pipefd);103}104else105_exit(0);106}107108ATF_TC_CLEANUP(_exit_success, tc)109{110cleanup();111}112113/*114* _exit(2) never returns, hence the auditing by default is always successful115*/116117118ATF_TC_WITH_CLEANUP(rfork_success);119ATF_TC_HEAD(rfork_success, tc)120{121atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "122"rfork(2) call");123}124125ATF_TC_BODY(rfork_success, tc)126{127pid = getpid();128snprintf(pcregex, sizeof(pcregex), "rfork.*%d.*return,success", pid);129130FILE *pipefd = setup(fds, auclass);131ATF_REQUIRE((pid = rfork(RFPROC)) != -1);132if (pid)133check_audit(fds, pcregex, pipefd);134else135_exit(0);136}137138ATF_TC_CLEANUP(rfork_success, tc)139{140cleanup();141}142143144ATF_TC_WITH_CLEANUP(rfork_failure);145ATF_TC_HEAD(rfork_failure, tc)146{147atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "148"rfork(2) call");149}150151ATF_TC_BODY(rfork_failure, tc)152{153pid = getpid();154snprintf(pcregex, sizeof(pcregex), "rfork.*%d.*return,failure", pid);155156FILE *pipefd = setup(fds, auclass);157/* Failure reason: Invalid argument */158ATF_REQUIRE_EQ(-1, rfork(-1));159check_audit(fds, pcregex, pipefd);160}161162ATF_TC_CLEANUP(rfork_failure, tc)163{164cleanup();165}166167168ATF_TC_WITH_CLEANUP(wait4_success);169ATF_TC_HEAD(wait4_success, tc)170{171atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "172"wait4(2) call");173}174175ATF_TC_BODY(wait4_success, tc)176{177pid = getpid();178snprintf(pcregex, sizeof(pcregex), "wait4.*%d.*return,success", pid);179180ATF_REQUIRE((pid = fork()) != -1);181if (pid) {182FILE *pipefd = setup(fds, auclass);183/* wpid = -1 : Wait for any child process */184ATF_REQUIRE(wait4(-1, &status, 0, NULL) != -1);185check_audit(fds, pcregex, pipefd);186}187else188_exit(0);189}190191ATF_TC_CLEANUP(wait4_success, tc)192{193cleanup();194}195196197ATF_TC_WITH_CLEANUP(wait4_failure);198ATF_TC_HEAD(wait4_failure, tc)199{200atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "201"wait4(2) call");202}203204ATF_TC_BODY(wait4_failure, tc)205{206pid = getpid();207snprintf(pcregex, sizeof(pcregex), "wait4.*%d.*return,failure", pid);208209FILE *pipefd = setup(fds, auclass);210/* Failure reason: No child process to wait for */211ATF_REQUIRE_EQ(-1, wait4(-1, NULL, 0, NULL));212check_audit(fds, pcregex, pipefd);213}214215ATF_TC_CLEANUP(wait4_failure, tc)216{217cleanup();218}219220221ATF_TC_WITH_CLEANUP(wait6_success);222ATF_TC_HEAD(wait6_success, tc)223{224atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "225"wait6(2) call");226}227228ATF_TC_BODY(wait6_success, tc)229{230pid = getpid();231snprintf(pcregex, sizeof(pcregex), "wait6.*%d.*return,success", pid);232233ATF_REQUIRE((pid = fork()) != -1);234if (pid) {235FILE *pipefd = setup(fds, auclass);236ATF_REQUIRE(wait6(P_ALL, 0, &status, WEXITED, NULL,NULL) != -1);237check_audit(fds, pcregex, pipefd);238}239else240_exit(0);241}242243ATF_TC_CLEANUP(wait6_success, tc)244{245cleanup();246}247248249ATF_TC_WITH_CLEANUP(wait6_failure);250ATF_TC_HEAD(wait6_failure, tc)251{252atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "253"wait6(2) call");254}255256ATF_TC_BODY(wait6_failure, tc)257{258pid = getpid();259snprintf(pcregex, sizeof(pcregex), "wait6.*%d.*return,failure", pid);260261FILE *pipefd = setup(fds, auclass);262/* Failure reason: Invalid argument */263ATF_REQUIRE_EQ(-1, wait6(0, 0, NULL, 0, NULL, NULL));264check_audit(fds, pcregex, pipefd);265}266267ATF_TC_CLEANUP(wait6_failure, tc)268{269cleanup();270}271272273ATF_TC_WITH_CLEANUP(kill_success);274ATF_TC_HEAD(kill_success, tc)275{276atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "277"kill(2) call");278}279280ATF_TC_BODY(kill_success, tc)281{282pid = getpid();283snprintf(pcregex, sizeof(pcregex), "kill.*%d.*return,success", pid);284285FILE *pipefd = setup(fds, auclass);286/* Don't send any signal to anyone, live in peace! */287ATF_REQUIRE_EQ(0, kill(0, 0));288check_audit(fds, pcregex, pipefd);289}290291ATF_TC_CLEANUP(kill_success, tc)292{293cleanup();294}295296297ATF_TC_WITH_CLEANUP(kill_failure);298ATF_TC_HEAD(kill_failure, tc)299{300atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "301"kill(2) call");302}303304ATF_TC_BODY(kill_failure, tc)305{306pid = getpid();307snprintf(pcregex, sizeof(pcregex), "kill.*%d.*return,failure", pid);308309FILE *pipefd = setup(fds, auclass);310/*311* Failure reason: Non existent process with PID '-2'312* Note: '-1' is not used as it means sending no signal to313* all non-system processes: A successful invocation314*/315ATF_REQUIRE_EQ(-1, kill(0, -2));316check_audit(fds, pcregex, pipefd);317}318319ATF_TC_CLEANUP(kill_failure, tc)320{321cleanup();322}323324325ATF_TC_WITH_CLEANUP(chdir_success);326ATF_TC_HEAD(chdir_success, tc)327{328atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "329"chdir(2) call");330}331332ATF_TC_BODY(chdir_success, tc)333{334pid = getpid();335snprintf(pcregex, sizeof(pcregex), "chdir.*/.*%d.*return,success", pid);336337FILE *pipefd = setup(fds, auclass);338ATF_REQUIRE_EQ(0, chdir("/"));339check_audit(fds, pcregex, pipefd);340}341342ATF_TC_CLEANUP(chdir_success, tc)343{344cleanup();345}346347348ATF_TC_WITH_CLEANUP(chdir_failure);349ATF_TC_HEAD(chdir_failure, tc)350{351atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "352"chdir(2) call");353}354355ATF_TC_BODY(chdir_failure, tc)356{357pid = getpid();358snprintf(pcregex, sizeof(pcregex), "chdir.*%d.*return,failure", pid);359360FILE *pipefd = setup(fds, auclass);361/* Failure reason: Bad address */362ATF_REQUIRE_EQ(-1, chdir(NULL));363check_audit(fds, pcregex, pipefd);364}365366ATF_TC_CLEANUP(chdir_failure, tc)367{368cleanup();369}370371372ATF_TC_WITH_CLEANUP(fchdir_success);373ATF_TC_HEAD(fchdir_success, tc)374{375atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "376"fchdir(2) call");377}378379ATF_TC_BODY(fchdir_success, tc)380{381/* Build an absolute path to the test-case directory */382char dirpath[50];383ATF_REQUIRE(getcwd(dirpath, sizeof(dirpath)) != NULL);384ATF_REQUIRE((filedesc = open(dirpath, O_RDONLY)) != -1);385386/* Audit record generated by fchdir(2) does not contain filedesc */387pid = getpid();388snprintf(pcregex, sizeof(pcregex), "fchdir.*%d.*return,success", pid);389390FILE *pipefd = setup(fds, auclass);391ATF_REQUIRE_EQ(0, fchdir(filedesc));392check_audit(fds, pcregex, pipefd);393close(filedesc);394}395396ATF_TC_CLEANUP(fchdir_success, tc)397{398cleanup();399}400401402ATF_TC_WITH_CLEANUP(fchdir_failure);403ATF_TC_HEAD(fchdir_failure, tc)404{405atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "406"fchdir(2) call");407}408409ATF_TC_BODY(fchdir_failure, tc)410{411pid = getpid();412snprintf(pcregex, sizeof(pcregex), "fchdir.*%d.*return,failure", pid);413414FILE *pipefd = setup(fds, auclass);415/* Failure reason: Bad directory address */416ATF_REQUIRE_EQ(-1, fchdir(-1));417check_audit(fds, pcregex, pipefd);418}419420ATF_TC_CLEANUP(fchdir_failure, tc)421{422cleanup();423}424425426ATF_TC_WITH_CLEANUP(chroot_success);427ATF_TC_HEAD(chroot_success, tc)428{429atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "430"chroot(2) call");431}432433ATF_TC_BODY(chroot_success, tc)434{435pid = getpid();436snprintf(pcregex, sizeof(pcregex), "chroot.*%d.*return,success", pid);437438FILE *pipefd = setup(fds, auclass);439/* We don't want to change the root directory, hence '/' */440ATF_REQUIRE_EQ(0, chroot("/"));441check_audit(fds, pcregex, pipefd);442}443444ATF_TC_CLEANUP(chroot_success, tc)445{446cleanup();447}448449450ATF_TC_WITH_CLEANUP(chroot_failure);451ATF_TC_HEAD(chroot_failure, tc)452{453atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "454"chroot(2) call");455}456457ATF_TC_BODY(chroot_failure, tc)458{459pid = getpid();460snprintf(pcregex, sizeof(pcregex), "chroot.*%d.*return,failure", pid);461462FILE *pipefd = setup(fds, auclass);463ATF_REQUIRE_EQ(-1, chroot(NULL));464check_audit(fds, pcregex, pipefd);465}466467ATF_TC_CLEANUP(chroot_failure, tc)468{469cleanup();470}471472473ATF_TC_WITH_CLEANUP(umask_success);474ATF_TC_HEAD(umask_success, tc)475{476atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "477"umask(2) call");478}479480ATF_TC_BODY(umask_success, tc)481{482pid = getpid();483snprintf(pcregex, sizeof(pcregex), "umask.*%d.*return,success", pid);484485FILE *pipefd = setup(fds, auclass);486umask(0);487check_audit(fds, pcregex, pipefd);488}489490ATF_TC_CLEANUP(umask_success, tc)491{492cleanup();493}494495/*496* umask(2) system call never fails. Hence, no test case for failure mode497*/498499500ATF_TC_WITH_CLEANUP(setuid_success);501ATF_TC_HEAD(setuid_success, tc)502{503atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "504"setuid(2) call");505}506507ATF_TC_BODY(setuid_success, tc)508{509pid = getpid();510snprintf(pcregex, sizeof(pcregex), "setuid.*%d.*return,success", pid);511512FILE *pipefd = setup(fds, auclass);513/* Since we're privileged, we'll let ourselves be privileged! */514ATF_REQUIRE_EQ(0, setuid(0));515check_audit(fds, pcregex, pipefd);516}517518ATF_TC_CLEANUP(setuid_success, tc)519{520cleanup();521}522523/*524* setuid(2) fails only when the current user is not root. So no test case for525* failure mode since the required_user="root"526*/527528529ATF_TC_WITH_CLEANUP(seteuid_success);530ATF_TC_HEAD(seteuid_success, tc)531{532atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "533"seteuid(2) call");534}535536ATF_TC_BODY(seteuid_success, tc)537{538pid = getpid();539snprintf(pcregex, sizeof(pcregex), "seteuid.*%d.*return,success", pid);540541FILE *pipefd = setup(fds, auclass);542/* This time, we'll let ourselves be 'effectively' privileged! */543ATF_REQUIRE_EQ(0, seteuid(0));544check_audit(fds, pcregex, pipefd);545}546547ATF_TC_CLEANUP(seteuid_success, tc)548{549cleanup();550}551552/*553* seteuid(2) fails only when the current user is not root. So no test case for554* failure mode since the required_user="root"555*/556557558ATF_TC_WITH_CLEANUP(setgid_success);559ATF_TC_HEAD(setgid_success, tc)560{561atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "562"setgid(2) call");563}564565ATF_TC_BODY(setgid_success, tc)566{567pid = getpid();568snprintf(pcregex, sizeof(pcregex), "setgid.*%d.*return,success", pid);569570FILE *pipefd = setup(fds, auclass);571ATF_REQUIRE_EQ(0, setgid(0));572check_audit(fds, pcregex, pipefd);573}574575ATF_TC_CLEANUP(setgid_success, tc)576{577cleanup();578}579580/*581* setgid(2) fails only when the current user is not root. So no test case for582* failure mode since the required_user="root"583*/584585586ATF_TC_WITH_CLEANUP(setegid_success);587ATF_TC_HEAD(setegid_success, tc)588{589atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "590"setegid(2) call");591}592593ATF_TC_BODY(setegid_success, tc)594{595pid = getpid();596snprintf(pcregex, sizeof(pcregex), "setegid.*%d.*return,success", pid);597598FILE *pipefd = setup(fds, auclass);599ATF_REQUIRE_EQ(0, setegid(0));600check_audit(fds, pcregex, pipefd);601}602603ATF_TC_CLEANUP(setegid_success, tc)604{605cleanup();606}607608/*609* setegid(2) fails only when the current user is not root. So no test case for610* failure mode since the required_user="root"611*/612613614ATF_TC_WITH_CLEANUP(setregid_success);615ATF_TC_HEAD(setregid_success, tc)616{617atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "618"setregid(2) call");619}620621ATF_TC_BODY(setregid_success, tc)622{623pid = getpid();624snprintf(pcregex, sizeof(pcregex), "setregid.*%d.*return,success", pid);625626FILE *pipefd = setup(fds, auclass);627/* setregid(-1, -1) does not change any real or effective GIDs */628ATF_REQUIRE_EQ(0, setregid(-1, -1));629check_audit(fds, pcregex, pipefd);630}631632ATF_TC_CLEANUP(setregid_success, tc)633{634cleanup();635}636637/*638* setregid(2) fails only when the current user is not root. So no test case for639* failure mode since the required_user="root"640*/641642643ATF_TC_WITH_CLEANUP(setreuid_success);644ATF_TC_HEAD(setreuid_success, tc)645{646atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "647"setreuid(2) call");648}649650ATF_TC_BODY(setreuid_success, tc)651{652pid = getpid();653snprintf(pcregex, sizeof(pcregex), "setreuid.*%d.*return,success", pid);654655FILE *pipefd = setup(fds, auclass);656/* setreuid(-1, -1) does not change any real or effective UIDs */657ATF_REQUIRE_EQ(0, setreuid(-1, -1));658check_audit(fds, pcregex, pipefd);659}660661ATF_TC_CLEANUP(setreuid_success, tc)662{663cleanup();664}665666/*667* setregid(2) fails only when the current user is not root. So no test case for668* failure mode since the required_user="root"669*/670671672ATF_TC_WITH_CLEANUP(setresuid_success);673ATF_TC_HEAD(setresuid_success, tc)674{675atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "676"setresuid(2) call");677}678679ATF_TC_BODY(setresuid_success, tc)680{681pid = getpid();682snprintf(pcregex, sizeof(pcregex), "setresuid.*%d.*return,success", pid);683684FILE *pipefd = setup(fds, auclass);685/* setresuid(-1, -1, -1) does not change real, effective & saved UIDs */686ATF_REQUIRE_EQ(0, setresuid(-1, -1, -1));687check_audit(fds, pcregex, pipefd);688}689690ATF_TC_CLEANUP(setresuid_success, tc)691{692cleanup();693}694695/*696* setresuid(2) fails only when the current user is not root. So no test case697* for failure mode since the required_user="root"698*/699700701ATF_TC_WITH_CLEANUP(setresgid_success);702ATF_TC_HEAD(setresgid_success, tc)703{704atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "705"setresgid(2) call");706}707708ATF_TC_BODY(setresgid_success, tc)709{710pid = getpid();711snprintf(pcregex, sizeof(pcregex), "setresgid.*%d.*ret.*success", pid);712713FILE *pipefd = setup(fds, auclass);714/* setresgid(-1, -1, -1) does not change real, effective & saved GIDs */715ATF_REQUIRE_EQ(0, setresgid(-1, -1, -1));716check_audit(fds, pcregex, pipefd);717}718719ATF_TC_CLEANUP(setresgid_success, tc)720{721cleanup();722}723724/*725* setresgid(2) fails only when the current user is not root. So no test case726* for failure mode since the required_user="root"727*/728729730ATF_TC_WITH_CLEANUP(getresuid_success);731ATF_TC_HEAD(getresuid_success, tc)732{733atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "734"getresuid(2) call");735}736737ATF_TC_BODY(getresuid_success, tc)738{739pid = getpid();740snprintf(pcregex, sizeof(pcregex), "getresuid.*%d.*ret.*success", pid);741742FILE *pipefd = setup(fds, auclass);743ATF_REQUIRE_EQ(0, getresuid(NULL, NULL, NULL));744check_audit(fds, pcregex, pipefd);745}746747ATF_TC_CLEANUP(getresuid_success, tc)748{749cleanup();750}751752753ATF_TC_WITH_CLEANUP(getresuid_failure);754ATF_TC_HEAD(getresuid_failure, tc)755{756atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "757"getresuid(2) call");758}759760ATF_TC_BODY(getresuid_failure, tc)761{762pid = getpid();763snprintf(pcregex, sizeof(pcregex), "getresuid.*%d.*ret.*failure", pid);764765FILE *pipefd = setup(fds, auclass);766/* Failure reason: Invalid address "-1" */767ATF_REQUIRE_EQ(-1, getresuid((uid_t *)-1, NULL, NULL));768check_audit(fds, pcregex, pipefd);769}770771ATF_TC_CLEANUP(getresuid_failure, tc)772{773cleanup();774}775776777ATF_TC_WITH_CLEANUP(getresgid_success);778ATF_TC_HEAD(getresgid_success, tc)779{780atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "781"getresgid(2) call");782}783784ATF_TC_BODY(getresgid_success, tc)785{786pid = getpid();787snprintf(pcregex, sizeof(pcregex), "getresgid.*%d.*ret.*success", pid);788789FILE *pipefd = setup(fds, auclass);790ATF_REQUIRE_EQ(0, getresgid(NULL, NULL, NULL));791check_audit(fds, pcregex, pipefd);792}793794ATF_TC_CLEANUP(getresgid_success, tc)795{796cleanup();797}798799800ATF_TC_WITH_CLEANUP(getresgid_failure);801ATF_TC_HEAD(getresgid_failure, tc)802{803atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "804"getresgid(2) call");805}806807ATF_TC_BODY(getresgid_failure, tc)808{809pid = getpid();810snprintf(pcregex, sizeof(pcregex), "getresgid.*%d.*ret.*failure", pid);811812FILE *pipefd = setup(fds, auclass);813/* Failure reason: Invalid address "-1" */814ATF_REQUIRE_EQ(-1, getresgid((gid_t *)-1, NULL, NULL));815check_audit(fds, pcregex, pipefd);816}817818ATF_TC_CLEANUP(getresgid_failure, tc)819{820cleanup();821}822823824ATF_TC_WITH_CLEANUP(setpriority_success);825ATF_TC_HEAD(setpriority_success, tc)826{827atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "828"setpriority(2) call");829}830831ATF_TC_BODY(setpriority_success, tc)832{833pid = getpid();834snprintf(pcregex, sizeof(pcregex), "setpriority.*%d.*success", pid);835836FILE *pipefd = setup(fds, auclass);837ATF_REQUIRE_EQ(0, setpriority(PRIO_PROCESS, 0, 0));838check_audit(fds, pcregex, pipefd);839}840841ATF_TC_CLEANUP(setpriority_success, tc)842{843cleanup();844}845846847ATF_TC_WITH_CLEANUP(setpriority_failure);848ATF_TC_HEAD(setpriority_failure, tc)849{850atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "851"setpriority(2) call");852}853854ATF_TC_BODY(setpriority_failure, tc)855{856pid = getpid();857snprintf(pcregex, sizeof(pcregex), "setpriority.*%d.*failure", pid);858859FILE *pipefd = setup(fds, auclass);860ATF_REQUIRE_EQ(-1, setpriority(-1, -1, -1));861check_audit(fds, pcregex, pipefd);862}863864ATF_TC_CLEANUP(setpriority_failure, tc)865{866cleanup();867}868869870ATF_TC_WITH_CLEANUP(setgroups_success);871ATF_TC_HEAD(setgroups_success, tc)872{873atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "874"setgroups(2) call");875}876877ATF_TC_BODY(setgroups_success, tc)878{879gid_t gids[5];880pid = getpid();881snprintf(pcregex, sizeof(pcregex), "setgroups.*%d.*ret.*success", pid);882/* Retrieve the current group access list to be used with setgroups */883ATF_REQUIRE(getgroups(sizeof(gids)/sizeof(gids[0]), gids) != -1);884885FILE *pipefd = setup(fds, auclass);886ATF_REQUIRE_EQ(0, setgroups(sizeof(gids)/sizeof(gids[0]), gids));887check_audit(fds, pcregex, pipefd);888}889890ATF_TC_CLEANUP(setgroups_success, tc)891{892cleanup();893}894895896ATF_TC_WITH_CLEANUP(setgroups_failure);897ATF_TC_HEAD(setgroups_failure, tc)898{899atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "900"setgroups(2) call");901}902903ATF_TC_BODY(setgroups_failure, tc)904{905pid = getpid();906snprintf(pcregex, sizeof(pcregex), "setgroups.*%d.*ret.*failure", pid);907908FILE *pipefd = setup(fds, auclass);909ATF_REQUIRE_EQ(-1, setgroups(-1, NULL));910check_audit(fds, pcregex, pipefd);911}912913ATF_TC_CLEANUP(setgroups_failure, tc)914{915cleanup();916}917918919ATF_TC_WITH_CLEANUP(setpgrp_success);920ATF_TC_HEAD(setpgrp_success, tc)921{922atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "923"setpgrp(2) call");924}925926ATF_TC_BODY(setpgrp_success, tc)927{928/* Main procedure is carried out from within the child process */929ATF_REQUIRE((pid = fork()) != -1);930if (pid) {931ATF_REQUIRE(wait(&status) != -1);932} else {933pid = getpid();934snprintf(pcregex, sizeof(pcregex), "setpgrp.*%d.*success", pid);935936FILE *pipefd = setup(fds, auclass);937ATF_REQUIRE_EQ(0, setpgrp(0, 0));938check_audit(fds, pcregex, pipefd);939}940}941942ATF_TC_CLEANUP(setpgrp_success, tc)943{944cleanup();945}946947948ATF_TC_WITH_CLEANUP(setpgrp_failure);949ATF_TC_HEAD(setpgrp_failure, tc)950{951atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "952"setpgrp(2) call");953}954955ATF_TC_BODY(setpgrp_failure, tc)956{957pid = getpid();958snprintf(pcregex, sizeof(pcregex), "setpgrp.*%d.*return,failure", pid);959960FILE *pipefd = setup(fds, auclass);961ATF_REQUIRE_EQ(-1, setpgrp(-1, -1));962check_audit(fds, pcregex, pipefd);963}964965ATF_TC_CLEANUP(setpgrp_failure, tc)966{967cleanup();968}969970971ATF_TC_WITH_CLEANUP(setsid_success);972ATF_TC_HEAD(setsid_success, tc)973{974atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "975"setsid(2) call");976}977978ATF_TC_BODY(setsid_success, tc)979{980/* Main procedure is carried out from within the child process */981ATF_REQUIRE((pid = fork()) != -1);982if (pid) {983ATF_REQUIRE(wait(&status) != -1);984} else {985pid = getpid();986snprintf(pcregex, sizeof(pcregex), "setsid.*%d.*success", pid);987988FILE *pipefd = setup(fds, auclass);989ATF_REQUIRE(setsid() != -1);990check_audit(fds, pcregex, pipefd);991}992}993994ATF_TC_CLEANUP(setsid_success, tc)995{996cleanup();997}9989991000ATF_TC_WITH_CLEANUP(setsid_failure);1001ATF_TC_HEAD(setsid_failure, tc)1002{1003atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1004"setsid(2) call");1005}10061007ATF_TC_BODY(setsid_failure, tc)1008{1009pid = getpid();1010snprintf(pcregex, sizeof(pcregex), "setsid.*%d.*return,failure", pid);10111012/*1013* Here, we are intentionally ignoring the output of the setsid()1014* call because it may or may not be a process leader already. But it1015* ensures that the next invocation of setsid() will definitely fail.1016*/1017setsid();1018FILE *pipefd = setup(fds, auclass);1019/*1020* Failure reason: [EPERM] Creating a new session is not permitted1021* as the PID of calling process matches the PGID of a process group1022* created by premature setsid() call.1023*/1024ATF_REQUIRE_EQ(-1, setsid());1025check_audit(fds, pcregex, pipefd);1026}10271028ATF_TC_CLEANUP(setsid_failure, tc)1029{1030cleanup();1031}103210331034ATF_TC_WITH_CLEANUP(setrlimit_success);1035ATF_TC_HEAD(setrlimit_success, tc)1036{1037atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1038"setrlimit(2) call");1039}10401041ATF_TC_BODY(setrlimit_success, tc)1042{1043struct rlimit rlp;1044pid = getpid();1045snprintf(pcregex, sizeof(pcregex), "setrlimit.*%d.*ret.*success", pid);1046/* Retrieve the system resource consumption limit to be used later on */1047ATF_REQUIRE_EQ(0, getrlimit(RLIMIT_FSIZE, &rlp));10481049FILE *pipefd = setup(fds, auclass);1050ATF_REQUIRE_EQ(0, setrlimit(RLIMIT_FSIZE, &rlp));1051check_audit(fds, pcregex, pipefd);1052}10531054ATF_TC_CLEANUP(setrlimit_success, tc)1055{1056cleanup();1057}105810591060ATF_TC_WITH_CLEANUP(setrlimit_failure);1061ATF_TC_HEAD(setrlimit_failure, tc)1062{1063atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1064"setrlimit(2) call");1065}10661067ATF_TC_BODY(setrlimit_failure, tc)1068{1069pid = getpid();1070snprintf(pcregex, sizeof(pcregex), "setrlimit.*%d.*ret.*failure", pid);10711072FILE *pipefd = setup(fds, auclass);1073ATF_REQUIRE_EQ(-1, setrlimit(RLIMIT_FSIZE, NULL));1074check_audit(fds, pcregex, pipefd);1075}10761077ATF_TC_CLEANUP(setrlimit_failure, tc)1078{1079cleanup();1080}108110821083ATF_TC_WITH_CLEANUP(mlock_success);1084ATF_TC_HEAD(mlock_success, tc)1085{1086atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1087"mlock(2) call");1088}10891090ATF_TC_BODY(mlock_success, tc)1091{1092pid = getpid();1093snprintf(pcregex, sizeof(pcregex), "mlock.*%d.*return,success", pid);10941095FILE *pipefd = setup(fds, auclass);1096ATF_REQUIRE_EQ(0, mlock(NULL, 0));1097check_audit(fds, pcregex, pipefd);1098}10991100ATF_TC_CLEANUP(mlock_success, tc)1101{1102cleanup();1103}110411051106ATF_TC_WITH_CLEANUP(mlock_failure);1107ATF_TC_HEAD(mlock_failure, tc)1108{1109atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1110"mlock(2) call");1111}11121113ATF_TC_BODY(mlock_failure, tc)1114{1115pid = getpid();1116snprintf(pcregex, sizeof(pcregex), "mlock.*%d.*return,failure", pid);11171118FILE *pipefd = setup(fds, auclass);1119ATF_REQUIRE_EQ(-1, mlock((void *)(-1), -1));1120check_audit(fds, pcregex, pipefd);1121}11221123ATF_TC_CLEANUP(mlock_failure, tc)1124{1125cleanup();1126}112711281129ATF_TC_WITH_CLEANUP(munlock_success);1130ATF_TC_HEAD(munlock_success, tc)1131{1132atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1133"munlock(2) call");1134}11351136ATF_TC_BODY(munlock_success, tc)1137{1138pid = getpid();1139snprintf(pcregex, sizeof(pcregex), "munlock.*%d.*return,success", pid);11401141FILE *pipefd = setup(fds, auclass);1142ATF_REQUIRE_EQ(0, munlock(NULL, 0));1143check_audit(fds, pcregex, pipefd);1144}11451146ATF_TC_CLEANUP(munlock_success, tc)1147{1148cleanup();1149}115011511152ATF_TC_WITH_CLEANUP(munlock_failure);1153ATF_TC_HEAD(munlock_failure, tc)1154{1155atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1156"munlock(2) call");1157}11581159ATF_TC_BODY(munlock_failure, tc)1160{1161pid = getpid();1162snprintf(pcregex, sizeof(pcregex), "munlock.*%d.*return,failure", pid);11631164FILE *pipefd = setup(fds, auclass);1165ATF_REQUIRE_EQ(-1, munlock((void *)(-1), -1));1166check_audit(fds, pcregex, pipefd);1167}11681169ATF_TC_CLEANUP(munlock_failure, tc)1170{1171cleanup();1172}117311741175ATF_TC_WITH_CLEANUP(minherit_success);1176ATF_TC_HEAD(minherit_success, tc)1177{1178atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1179"minherit(2) call");1180}11811182ATF_TC_BODY(minherit_success, tc)1183{1184pid = getpid();1185snprintf(pcregex, sizeof(pcregex), "minherit.*%d.*return,success", pid);11861187FILE *pipefd = setup(fds, auclass);1188ATF_REQUIRE_EQ(0, minherit(NULL, 0, INHERIT_ZERO));1189check_audit(fds, pcregex, pipefd);1190}11911192ATF_TC_CLEANUP(minherit_success, tc)1193{1194cleanup();1195}119611971198ATF_TC_WITH_CLEANUP(minherit_failure);1199ATF_TC_HEAD(minherit_failure, tc)1200{1201atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1202"minherit(2) call");1203}12041205ATF_TC_BODY(minherit_failure, tc)1206{1207pid = getpid();1208snprintf(pcregex, sizeof(pcregex), "minherit.*%d.*return,failure", pid);12091210FILE *pipefd = setup(fds, auclass);1211ATF_REQUIRE_EQ(-1, minherit((void *)(-1), -1, 0));1212check_audit(fds, pcregex, pipefd);1213}12141215ATF_TC_CLEANUP(minherit_failure, tc)1216{1217cleanup();1218}121912201221ATF_TC_WITH_CLEANUP(setlogin_success);1222ATF_TC_HEAD(setlogin_success, tc)1223{1224atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1225"setlogin(2) call");1226}12271228ATF_TC_BODY(setlogin_success, tc)1229{1230char *name;1231pid = getpid();1232snprintf(pcregex, sizeof(pcregex), "setlogin.*%d.*return,success", pid);12331234/* Retrieve the current user's login name to be used with setlogin(2) */1235ATF_REQUIRE((name = getlogin()) != NULL);1236FILE *pipefd = setup(fds, auclass);1237ATF_REQUIRE_EQ(0, setlogin(name));1238check_audit(fds, pcregex, pipefd);1239}12401241ATF_TC_CLEANUP(setlogin_success, tc)1242{1243cleanup();1244}124512461247ATF_TC_WITH_CLEANUP(setlogin_failure);1248ATF_TC_HEAD(setlogin_failure, tc)1249{1250atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1251"setlogin(2) call");1252}12531254ATF_TC_BODY(setlogin_failure, tc)1255{1256pid = getpid();1257snprintf(pcregex, sizeof(pcregex), "setlogin.*%d.*return,failure", pid);12581259FILE *pipefd = setup(fds, auclass);1260ATF_REQUIRE_EQ(-1, setlogin(NULL));1261check_audit(fds, pcregex, pipefd);1262}12631264ATF_TC_CLEANUP(setlogin_failure, tc)1265{1266cleanup();1267}126812691270ATF_TC_WITH_CLEANUP(rtprio_success);1271ATF_TC_HEAD(rtprio_success, tc)1272{1273atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1274"rtprio(2) call");1275}12761277ATF_TC_BODY(rtprio_success, tc)1278{1279struct rtprio rtp;1280pid = getpid();1281snprintf(pcregex, sizeof(pcregex), "rtprio.*%d.*return,success", pid);12821283FILE *pipefd = setup(fds, auclass);1284ATF_REQUIRE_EQ(0, rtprio(RTP_LOOKUP, 0, &rtp));1285check_audit(fds, pcregex, pipefd);1286}12871288ATF_TC_CLEANUP(rtprio_success, tc)1289{1290cleanup();1291}129212931294ATF_TC_WITH_CLEANUP(rtprio_failure);1295ATF_TC_HEAD(rtprio_failure, tc)1296{1297atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1298"rtprio(2) call");1299}13001301ATF_TC_BODY(rtprio_failure, tc)1302{1303pid = getpid();1304snprintf(pcregex, sizeof(pcregex), "rtprio.*%d.*return,failure", pid);13051306FILE *pipefd = setup(fds, auclass);1307ATF_REQUIRE_EQ(-1, rtprio(-1, -1, NULL));1308check_audit(fds, pcregex, pipefd);1309}13101311ATF_TC_CLEANUP(rtprio_failure, tc)1312{1313cleanup();1314}131513161317ATF_TC_WITH_CLEANUP(profil_success);1318ATF_TC_HEAD(profil_success, tc)1319{1320atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1321"profil(2) call");1322}13231324ATF_TC_BODY(profil_success, tc)1325{1326pid = getpid();1327snprintf(pcregex, sizeof(pcregex), "profil.*%d.*return,success", pid);13281329char samples[20];1330FILE *pipefd = setup(fds, auclass);1331/* Set scale argument as 0 to disable profiling of current process */1332ATF_REQUIRE_EQ(0, profil(samples, sizeof(samples), 0, 0));1333check_audit(fds, pcregex, pipefd);1334}13351336ATF_TC_CLEANUP(profil_success, tc)1337{1338cleanup();1339}134013411342ATF_TC_WITH_CLEANUP(profil_failure);1343ATF_TC_HEAD(profil_failure, tc)1344{1345atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1346"profil(2) call");1347}13481349ATF_TC_BODY(profil_failure, tc)1350{1351pid = getpid();1352snprintf(pcregex, sizeof(pcregex), "profil.*%d.*return,failure", pid);13531354FILE *pipefd = setup(fds, auclass);1355ATF_REQUIRE_EQ(-1, profil((char *)(SIZE_MAX), -1, -1, -1));1356check_audit(fds, pcregex, pipefd);1357}13581359ATF_TC_CLEANUP(profil_failure, tc)1360{1361cleanup();1362}136313641365ATF_TC_WITH_CLEANUP(ptrace_success);1366ATF_TC_HEAD(ptrace_success, tc)1367{1368atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1369"ptrace(2) call");1370}13711372ATF_TC_BODY(ptrace_success, tc)1373{1374pid = getpid();1375snprintf(pcregex, sizeof(pcregex), "ptrace.*%d.*return,success", pid);13761377FILE *pipefd = setup(fds, auclass);1378ATF_REQUIRE_EQ(0, ptrace(PT_TRACE_ME, 0, NULL, 0));1379check_audit(fds, pcregex, pipefd);1380}13811382ATF_TC_CLEANUP(ptrace_success, tc)1383{1384cleanup();1385}138613871388ATF_TC_WITH_CLEANUP(ptrace_failure);1389ATF_TC_HEAD(ptrace_failure, tc)1390{1391atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1392"ptrace(2) call");1393}13941395ATF_TC_BODY(ptrace_failure, tc)1396{1397pid = getpid();1398snprintf(pcregex, sizeof(pcregex), "ptrace.*%d.*return,failure", pid);13991400FILE *pipefd = setup(fds, auclass);1401ATF_REQUIRE_EQ(-1, ptrace(-1, 0, NULL, 0));1402check_audit(fds, pcregex, pipefd);1403}14041405ATF_TC_CLEANUP(ptrace_failure, tc)1406{1407cleanup();1408}140914101411ATF_TC_WITH_CLEANUP(ktrace_success);1412ATF_TC_HEAD(ktrace_success, tc)1413{1414atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1415"ktrace(2) call");1416}14171418ATF_TC_BODY(ktrace_success, tc)1419{1420pid = getpid();1421snprintf(pcregex, sizeof(pcregex), "ktrace.*%d.*return,success", pid);14221423FILE *pipefd = setup(fds, auclass);1424ATF_REQUIRE_EQ(0, ktrace(NULL, KTROP_CLEAR, KTRFAC_SYSCALL, pid));1425check_audit(fds, pcregex, pipefd);1426}14271428ATF_TC_CLEANUP(ktrace_success, tc)1429{1430cleanup();1431}143214331434ATF_TC_WITH_CLEANUP(ktrace_failure);1435ATF_TC_HEAD(ktrace_failure, tc)1436{1437atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1438"ktrace(2) call");1439}14401441ATF_TC_BODY(ktrace_failure, tc)1442{1443pid = getpid();1444snprintf(pcregex, sizeof(pcregex), "ktrace.*%d.*return,failure", pid);14451446FILE *pipefd = setup(fds, auclass);1447ATF_REQUIRE_EQ(-1, ktrace(NULL, -1, -1, 0));1448check_audit(fds, pcregex, pipefd);1449}14501451ATF_TC_CLEANUP(ktrace_failure, tc)1452{1453cleanup();1454}145514561457ATF_TC_WITH_CLEANUP(procctl_success);1458ATF_TC_HEAD(procctl_success, tc)1459{1460atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1461"procctl(2) call");1462}14631464ATF_TC_BODY(procctl_success, tc)1465{1466pid = getpid();1467snprintf(pcregex, sizeof(pcregex), "procctl.*%d.*return,success", pid);14681469struct procctl_reaper_status reapstat;1470FILE *pipefd = setup(fds, auclass);1471/* Retrieve information about the reaper of current process (pid) */1472ATF_REQUIRE_EQ(0, procctl(P_PID, pid, PROC_REAP_STATUS, &reapstat));1473check_audit(fds, pcregex, pipefd);1474}14751476ATF_TC_CLEANUP(procctl_success, tc)1477{1478cleanup();1479}148014811482ATF_TC_WITH_CLEANUP(procctl_failure);1483ATF_TC_HEAD(procctl_failure, tc)1484{1485atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1486"procctl(2) call");1487}14881489ATF_TC_BODY(procctl_failure, tc)1490{1491pid = getpid();1492snprintf(pcregex, sizeof(pcregex), "procctl.*%d.*return,failure", pid);14931494FILE *pipefd = setup(fds, auclass);1495ATF_REQUIRE_EQ(-1, procctl(-1, -1, -1, NULL));1496check_audit(fds, pcregex, pipefd);1497}14981499ATF_TC_CLEANUP(procctl_failure, tc)1500{1501cleanup();1502}150315041505ATF_TC_WITH_CLEANUP(cap_enter_success);1506ATF_TC_HEAD(cap_enter_success, tc)1507{1508atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1509"cap_enter(2) call");1510}15111512ATF_TC_BODY(cap_enter_success, tc)1513{1514ATF_REQUIRE_FEATURE("security_capability_mode");15151516FILE *pipefd = setup(fds, auclass);1517ATF_REQUIRE((pid = fork()) != -1);1518if (pid) {1519snprintf(pcregex, sizeof(pcregex),1520"cap_enter.*%d.*return,success", pid);1521ATF_REQUIRE(wait(&status) != -1);1522check_audit(fds, pcregex, pipefd);1523}1524else {1525ATF_REQUIRE_EQ(0, cap_enter());1526_exit(0);1527}1528}15291530ATF_TC_CLEANUP(cap_enter_success, tc)1531{1532cleanup();1533}153415351536ATF_TC_WITH_CLEANUP(cap_getmode_success);1537ATF_TC_HEAD(cap_getmode_success, tc)1538{1539atf_tc_set_md_var(tc, "descr", "Tests the audit of a successful "1540"cap_getmode(2) call");1541}15421543ATF_TC_BODY(cap_getmode_success, tc)1544{1545int modep;15461547ATF_REQUIRE_FEATURE("security_capability_mode");15481549pid = getpid();1550snprintf(pcregex, sizeof(pcregex), "cap_getmode.*%d.*success", pid);15511552FILE *pipefd = setup(fds, auclass);1553ATF_REQUIRE_EQ(0, cap_getmode(&modep));1554check_audit(fds, pcregex, pipefd);1555}15561557ATF_TC_CLEANUP(cap_getmode_success, tc)1558{1559cleanup();1560}156115621563ATF_TC_WITH_CLEANUP(cap_getmode_failure);1564ATF_TC_HEAD(cap_getmode_failure, tc)1565{1566atf_tc_set_md_var(tc, "descr", "Tests the audit of an unsuccessful "1567"cap_getmode(2) call");1568}15691570ATF_TC_BODY(cap_getmode_failure, tc)1571{1572pid = getpid();1573snprintf(pcregex, sizeof(pcregex), "cap_getmode.*%d.*failure", pid);15741575FILE *pipefd = setup(fds, auclass);1576/* cap_getmode(2) can either fail with EFAULT or ENOSYS */1577ATF_REQUIRE_EQ(-1, cap_getmode(NULL));1578check_audit(fds, pcregex, pipefd);1579}15801581ATF_TC_CLEANUP(cap_getmode_failure, tc)1582{1583cleanup();1584}158515861587ATF_TP_ADD_TCS(tp)1588{1589ATF_TP_ADD_TC(tp, fork_success);1590ATF_TP_ADD_TC(tp, _exit_success);1591ATF_TP_ADD_TC(tp, rfork_success);1592ATF_TP_ADD_TC(tp, rfork_failure);15931594ATF_TP_ADD_TC(tp, wait4_success);1595ATF_TP_ADD_TC(tp, wait4_failure);1596ATF_TP_ADD_TC(tp, wait6_success);1597ATF_TP_ADD_TC(tp, wait6_failure);1598ATF_TP_ADD_TC(tp, kill_success);1599ATF_TP_ADD_TC(tp, kill_failure);16001601ATF_TP_ADD_TC(tp, chdir_success);1602ATF_TP_ADD_TC(tp, chdir_failure);1603ATF_TP_ADD_TC(tp, fchdir_success);1604ATF_TP_ADD_TC(tp, fchdir_failure);1605ATF_TP_ADD_TC(tp, chroot_success);1606ATF_TP_ADD_TC(tp, chroot_failure);16071608ATF_TP_ADD_TC(tp, umask_success);1609ATF_TP_ADD_TC(tp, setuid_success);1610ATF_TP_ADD_TC(tp, seteuid_success);1611ATF_TP_ADD_TC(tp, setgid_success);1612ATF_TP_ADD_TC(tp, setegid_success);16131614ATF_TP_ADD_TC(tp, setreuid_success);1615ATF_TP_ADD_TC(tp, setregid_success);1616ATF_TP_ADD_TC(tp, setresuid_success);1617ATF_TP_ADD_TC(tp, setresgid_success);16181619ATF_TP_ADD_TC(tp, getresuid_success);1620ATF_TP_ADD_TC(tp, getresuid_failure);1621ATF_TP_ADD_TC(tp, getresgid_success);1622ATF_TP_ADD_TC(tp, getresgid_failure);16231624ATF_TP_ADD_TC(tp, setpriority_success);1625ATF_TP_ADD_TC(tp, setpriority_failure);1626ATF_TP_ADD_TC(tp, setgroups_success);1627ATF_TP_ADD_TC(tp, setgroups_failure);1628ATF_TP_ADD_TC(tp, setpgrp_success);1629ATF_TP_ADD_TC(tp, setpgrp_failure);1630ATF_TP_ADD_TC(tp, setsid_success);1631ATF_TP_ADD_TC(tp, setsid_failure);1632ATF_TP_ADD_TC(tp, setrlimit_success);1633ATF_TP_ADD_TC(tp, setrlimit_failure);16341635ATF_TP_ADD_TC(tp, mlock_success);1636ATF_TP_ADD_TC(tp, mlock_failure);1637ATF_TP_ADD_TC(tp, munlock_success);1638ATF_TP_ADD_TC(tp, munlock_failure);1639ATF_TP_ADD_TC(tp, minherit_success);1640ATF_TP_ADD_TC(tp, minherit_failure);16411642ATF_TP_ADD_TC(tp, setlogin_success);1643ATF_TP_ADD_TC(tp, setlogin_failure);1644ATF_TP_ADD_TC(tp, rtprio_success);1645ATF_TP_ADD_TC(tp, rtprio_failure);16461647ATF_TP_ADD_TC(tp, profil_success);1648ATF_TP_ADD_TC(tp, profil_failure);1649ATF_TP_ADD_TC(tp, ptrace_success);1650ATF_TP_ADD_TC(tp, ptrace_failure);1651ATF_TP_ADD_TC(tp, ktrace_success);1652ATF_TP_ADD_TC(tp, ktrace_failure);1653ATF_TP_ADD_TC(tp, procctl_success);1654ATF_TP_ADD_TC(tp, procctl_failure);16551656ATF_TP_ADD_TC(tp, cap_enter_success);1657ATF_TP_ADD_TC(tp, cap_getmode_success);1658ATF_TP_ADD_TC(tp, cap_getmode_failure);16591660return (atf_no_error());1661}166216631664