12aba0eeaSKyle Evans /* @generated by `generate-fortify-tests.lua "select"` */
22aba0eeaSKyle Evans
32aba0eeaSKyle Evans #define _FORTIFY_SOURCE 2
42aba0eeaSKyle Evans #define TMPFILE_SIZE (1024 * 32)
52aba0eeaSKyle Evans
62aba0eeaSKyle Evans #include <sys/param.h>
7*22178cb2SKyle Evans #include <sys/jail.h>
82aba0eeaSKyle Evans #include <sys/random.h>
92aba0eeaSKyle Evans #include <sys/resource.h>
102aba0eeaSKyle Evans #include <sys/select.h>
111f155d48SKyle Evans #include <sys/socket.h>
122aba0eeaSKyle Evans #include <sys/time.h>
132aba0eeaSKyle Evans #include <sys/uio.h>
142aba0eeaSKyle Evans #include <sys/wait.h>
152aba0eeaSKyle Evans #include <dirent.h>
162aba0eeaSKyle Evans #include <errno.h>
172aba0eeaSKyle Evans #include <fcntl.h>
182aba0eeaSKyle Evans #include <limits.h>
192aba0eeaSKyle Evans #include <poll.h>
202aba0eeaSKyle Evans #include <signal.h>
212aba0eeaSKyle Evans #include <stdio.h>
222aba0eeaSKyle Evans #include <stdlib.h>
232aba0eeaSKyle Evans #include <string.h>
242aba0eeaSKyle Evans #include <strings.h>
252aba0eeaSKyle Evans #include <sysexits.h>
262aba0eeaSKyle Evans #include <unistd.h>
272aba0eeaSKyle Evans #include <wchar.h>
282aba0eeaSKyle Evans #include <atf-c.h>
292aba0eeaSKyle Evans
302aba0eeaSKyle Evans static FILE * __unused
new_fp(size_t __len)312aba0eeaSKyle Evans new_fp(size_t __len)
322aba0eeaSKyle Evans {
332aba0eeaSKyle Evans static char fpbuf[LINE_MAX];
342aba0eeaSKyle Evans FILE *fp;
352aba0eeaSKyle Evans
362aba0eeaSKyle Evans ATF_REQUIRE(__len <= sizeof(fpbuf));
372aba0eeaSKyle Evans
382aba0eeaSKyle Evans memset(fpbuf, 'A', sizeof(fpbuf) - 1);
392aba0eeaSKyle Evans fpbuf[sizeof(fpbuf) - 1] = '\0';
402aba0eeaSKyle Evans
412aba0eeaSKyle Evans fp = fmemopen(fpbuf, sizeof(fpbuf), "rb");
422aba0eeaSKyle Evans ATF_REQUIRE(fp != NULL);
432aba0eeaSKyle Evans
442aba0eeaSKyle Evans return (fp);
452aba0eeaSKyle Evans }
462aba0eeaSKyle Evans
472aba0eeaSKyle Evans /*
482aba0eeaSKyle Evans * Create a new symlink to use for readlink(2) style tests, we'll just use a
492aba0eeaSKyle Evans * random target name to have something interesting to look at.
502aba0eeaSKyle Evans */
512aba0eeaSKyle Evans static const char * __unused
new_symlink(size_t __len)522aba0eeaSKyle Evans new_symlink(size_t __len)
532aba0eeaSKyle Evans {
542aba0eeaSKyle Evans static const char linkname[] = "link";
552aba0eeaSKyle Evans char target[MAXNAMLEN];
562aba0eeaSKyle Evans int error;
572aba0eeaSKyle Evans
582aba0eeaSKyle Evans ATF_REQUIRE(__len <= sizeof(target));
592aba0eeaSKyle Evans
602aba0eeaSKyle Evans arc4random_buf(target, sizeof(target));
612aba0eeaSKyle Evans
622aba0eeaSKyle Evans error = unlink(linkname);
632aba0eeaSKyle Evans ATF_REQUIRE(error == 0 || errno == ENOENT);
642aba0eeaSKyle Evans
652aba0eeaSKyle Evans error = symlink(target, linkname);
662aba0eeaSKyle Evans ATF_REQUIRE(error == 0);
672aba0eeaSKyle Evans
682aba0eeaSKyle Evans return (linkname);
692aba0eeaSKyle Evans }
702aba0eeaSKyle Evans
712aba0eeaSKyle Evans /*
721f155d48SKyle Evans * For our purposes, first descriptor will be the reader; we'll send both
731f155d48SKyle Evans * raw data and a control message over it so that the result can be used for
741f155d48SKyle Evans * any of our recv*() tests.
751f155d48SKyle Evans */
761f155d48SKyle Evans static void __unused
new_socket(int sock[2])771f155d48SKyle Evans new_socket(int sock[2])
781f155d48SKyle Evans {
791f155d48SKyle Evans unsigned char ctrl[CMSG_SPACE(sizeof(int))] = { 0 };
801f155d48SKyle Evans static char sockbuf[256];
811f155d48SKyle Evans ssize_t rv;
821f155d48SKyle Evans size_t total = 0;
831f155d48SKyle Evans struct msghdr hdr = { 0 };
841f155d48SKyle Evans struct cmsghdr *cmsg;
851f155d48SKyle Evans int error, fd;
861f155d48SKyle Evans
871f155d48SKyle Evans error = socketpair(AF_UNIX, SOCK_STREAM, 0, sock);
881f155d48SKyle Evans ATF_REQUIRE(error == 0);
891f155d48SKyle Evans
901f155d48SKyle Evans while (total != sizeof(sockbuf)) {
911f155d48SKyle Evans rv = send(sock[1], &sockbuf[total], sizeof(sockbuf) - total, 0);
921f155d48SKyle Evans
931f155d48SKyle Evans ATF_REQUIRE_MSG(rv > 0,
941f155d48SKyle Evans "expected bytes sent, got %zd with %zu left (size %zu, total %zu)",
951f155d48SKyle Evans rv, sizeof(sockbuf) - total, sizeof(sockbuf), total);
961f155d48SKyle Evans ATF_REQUIRE_MSG(total + (size_t)rv <= sizeof(sockbuf),
971f155d48SKyle Evans "%zd exceeds total %zu", rv, sizeof(sockbuf));
981f155d48SKyle Evans total += rv;
991f155d48SKyle Evans }
1001f155d48SKyle Evans
1011f155d48SKyle Evans hdr.msg_control = ctrl;
1021f155d48SKyle Evans hdr.msg_controllen = sizeof(ctrl);
1031f155d48SKyle Evans
1041f155d48SKyle Evans cmsg = CMSG_FIRSTHDR(&hdr);
1051f155d48SKyle Evans cmsg->cmsg_level = SOL_SOCKET;
1061f155d48SKyle Evans cmsg->cmsg_type = SCM_RIGHTS;
1071f155d48SKyle Evans cmsg->cmsg_len = CMSG_LEN(sizeof(fd));
1081f155d48SKyle Evans fd = STDIN_FILENO;
1091f155d48SKyle Evans memcpy(CMSG_DATA(cmsg), &fd, sizeof(fd));
1101f155d48SKyle Evans
1111f155d48SKyle Evans error = sendmsg(sock[1], &hdr, 0);
1121f155d48SKyle Evans ATF_REQUIRE(error != -1);
1131f155d48SKyle Evans }
1141f155d48SKyle Evans
1151f155d48SKyle Evans /*
1162aba0eeaSKyle Evans * Constructs a tmpfile that we can use for testing read(2) and friends.
1172aba0eeaSKyle Evans */
1182aba0eeaSKyle Evans static int __unused
new_tmpfile(void)1192aba0eeaSKyle Evans new_tmpfile(void)
1202aba0eeaSKyle Evans {
1212aba0eeaSKyle Evans char buf[1024];
1222aba0eeaSKyle Evans ssize_t rv;
1232aba0eeaSKyle Evans size_t written;
1242aba0eeaSKyle Evans int fd;
1252aba0eeaSKyle Evans
1262aba0eeaSKyle Evans fd = open("tmpfile", O_RDWR | O_CREAT | O_TRUNC, 0644);
1272aba0eeaSKyle Evans ATF_REQUIRE(fd >= 0);
1282aba0eeaSKyle Evans
1292aba0eeaSKyle Evans written = 0;
1302aba0eeaSKyle Evans while (written < TMPFILE_SIZE) {
1312aba0eeaSKyle Evans rv = write(fd, buf, sizeof(buf));
1322aba0eeaSKyle Evans ATF_REQUIRE(rv > 0);
1332aba0eeaSKyle Evans
1342aba0eeaSKyle Evans written += rv;
1352aba0eeaSKyle Evans }
1362aba0eeaSKyle Evans
1372aba0eeaSKyle Evans ATF_REQUIRE_EQ(0, lseek(fd, 0, SEEK_SET));
1382aba0eeaSKyle Evans return (fd);
1392aba0eeaSKyle Evans }
1402aba0eeaSKyle Evans
1412aba0eeaSKyle Evans static void
disable_coredumps(void)1422aba0eeaSKyle Evans disable_coredumps(void)
1432aba0eeaSKyle Evans {
1442aba0eeaSKyle Evans struct rlimit rl = { 0 };
1452aba0eeaSKyle Evans
1462aba0eeaSKyle Evans if (setrlimit(RLIMIT_CORE, &rl) == -1)
1472aba0eeaSKyle Evans _exit(EX_OSERR);
1482aba0eeaSKyle Evans }
1492aba0eeaSKyle Evans
1502aba0eeaSKyle Evans /*
1512aba0eeaSKyle Evans * Replaces stdin with a file that we can actually read from, for tests where
1522aba0eeaSKyle Evans * we want a FILE * or fd that we can get data from.
1532aba0eeaSKyle Evans */
1542aba0eeaSKyle Evans static void __unused
replace_stdin(void)1552aba0eeaSKyle Evans replace_stdin(void)
1562aba0eeaSKyle Evans {
1572aba0eeaSKyle Evans int fd;
1582aba0eeaSKyle Evans
1592aba0eeaSKyle Evans fd = new_tmpfile();
1602aba0eeaSKyle Evans
1612aba0eeaSKyle Evans (void)dup2(fd, STDIN_FILENO);
1622aba0eeaSKyle Evans if (fd != STDIN_FILENO)
1632aba0eeaSKyle Evans close(fd);
1642aba0eeaSKyle Evans }
1652aba0eeaSKyle Evans
16609cdbf04SKyle Evans ATF_TC(FD_SET_before_end);
ATF_TC_HEAD(FD_SET_before_end,tc)16709cdbf04SKyle Evans ATF_TC_HEAD(FD_SET_before_end, tc)
16809cdbf04SKyle Evans {
16909cdbf04SKyle Evans }
ATF_TC_BODY(FD_SET_before_end,tc)1702aba0eeaSKyle Evans ATF_TC_BODY(FD_SET_before_end, tc)
1712aba0eeaSKyle Evans {
1722aba0eeaSKyle Evans #define BUF &__stack.__buf
1732aba0eeaSKyle Evans struct {
1742aba0eeaSKyle Evans uint8_t padding_l;
1752aba0eeaSKyle Evans fd_set __buf;
1762aba0eeaSKyle Evans uint8_t padding_r;
1772aba0eeaSKyle Evans } __stack;
1782aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
1792aba0eeaSKyle Evans const size_t __len = FD_SETSIZE - 1;
1802aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
1812aba0eeaSKyle Evans
1822aba0eeaSKyle Evans FD_SET(__idx, &__stack.__buf);
1832aba0eeaSKyle Evans #undef BUF
1842aba0eeaSKyle Evans
1852aba0eeaSKyle Evans }
1862aba0eeaSKyle Evans
18709cdbf04SKyle Evans ATF_TC(FD_SET_end);
ATF_TC_HEAD(FD_SET_end,tc)18809cdbf04SKyle Evans ATF_TC_HEAD(FD_SET_end, tc)
18909cdbf04SKyle Evans {
19009cdbf04SKyle Evans }
ATF_TC_BODY(FD_SET_end,tc)1912aba0eeaSKyle Evans ATF_TC_BODY(FD_SET_end, tc)
1922aba0eeaSKyle Evans {
1932aba0eeaSKyle Evans #define BUF &__stack.__buf
1942aba0eeaSKyle Evans struct {
1952aba0eeaSKyle Evans uint8_t padding_l;
1962aba0eeaSKyle Evans fd_set __buf;
1972aba0eeaSKyle Evans uint8_t padding_r;
1982aba0eeaSKyle Evans } __stack;
1992aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
2002aba0eeaSKyle Evans const size_t __len = FD_SETSIZE;
2012aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
2022aba0eeaSKyle Evans
2032aba0eeaSKyle Evans FD_SET(__idx, &__stack.__buf);
2042aba0eeaSKyle Evans #undef BUF
2052aba0eeaSKyle Evans
2062aba0eeaSKyle Evans }
2072aba0eeaSKyle Evans
20809cdbf04SKyle Evans ATF_TC(FD_SET_after_end);
ATF_TC_HEAD(FD_SET_after_end,tc)20909cdbf04SKyle Evans ATF_TC_HEAD(FD_SET_after_end, tc)
21009cdbf04SKyle Evans {
21109cdbf04SKyle Evans }
ATF_TC_BODY(FD_SET_after_end,tc)2122aba0eeaSKyle Evans ATF_TC_BODY(FD_SET_after_end, tc)
2132aba0eeaSKyle Evans {
2142aba0eeaSKyle Evans #define BUF &__stack.__buf
2152aba0eeaSKyle Evans struct {
2162aba0eeaSKyle Evans uint8_t padding_l;
2172aba0eeaSKyle Evans fd_set __buf;
2182aba0eeaSKyle Evans uint8_t padding_r;
2192aba0eeaSKyle Evans } __stack;
2202aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
2212aba0eeaSKyle Evans const size_t __len = FD_SETSIZE + 1;
2222aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
2232aba0eeaSKyle Evans pid_t __child;
2242aba0eeaSKyle Evans int __status;
2252aba0eeaSKyle Evans
2262aba0eeaSKyle Evans __child = fork();
2272aba0eeaSKyle Evans ATF_REQUIRE(__child >= 0);
2282aba0eeaSKyle Evans if (__child > 0)
2292aba0eeaSKyle Evans goto monitor;
2302aba0eeaSKyle Evans
2312aba0eeaSKyle Evans /* Child */
2322aba0eeaSKyle Evans disable_coredumps();
2332aba0eeaSKyle Evans FD_SET(__idx, &__stack.__buf);
2342aba0eeaSKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
2352aba0eeaSKyle Evans
2362aba0eeaSKyle Evans monitor:
2372aba0eeaSKyle Evans while (waitpid(__child, &__status, 0) != __child) {
2382aba0eeaSKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
2392aba0eeaSKyle Evans }
2402aba0eeaSKyle Evans
2412aba0eeaSKyle Evans if (!WIFSIGNALED(__status)) {
2422aba0eeaSKyle Evans switch (WEXITSTATUS(__status)) {
2432aba0eeaSKyle Evans case EX_SOFTWARE:
2442aba0eeaSKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
2452aba0eeaSKyle Evans break;
2462aba0eeaSKyle Evans case EX_OSERR:
2472aba0eeaSKyle Evans atf_tc_fail("setrlimit(2) failed");
2482aba0eeaSKyle Evans break;
2492aba0eeaSKyle Evans default:
2502aba0eeaSKyle Evans atf_tc_fail("child exited with status %d",
2512aba0eeaSKyle Evans WEXITSTATUS(__status));
2522aba0eeaSKyle Evans }
2532aba0eeaSKyle Evans } else {
2542aba0eeaSKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
2552aba0eeaSKyle Evans }
2562aba0eeaSKyle Evans #undef BUF
2572aba0eeaSKyle Evans
2582aba0eeaSKyle Evans }
2592aba0eeaSKyle Evans
26009cdbf04SKyle Evans ATF_TC(FD_SET_heap_before_end);
ATF_TC_HEAD(FD_SET_heap_before_end,tc)26109cdbf04SKyle Evans ATF_TC_HEAD(FD_SET_heap_before_end, tc)
26209cdbf04SKyle Evans {
26309cdbf04SKyle Evans }
ATF_TC_BODY(FD_SET_heap_before_end,tc)2642aba0eeaSKyle Evans ATF_TC_BODY(FD_SET_heap_before_end, tc)
2652aba0eeaSKyle Evans {
2662aba0eeaSKyle Evans #define BUF __stack.__buf
2672aba0eeaSKyle Evans struct {
2682aba0eeaSKyle Evans uint8_t padding_l;
2692aba0eeaSKyle Evans fd_set * __buf;
2702aba0eeaSKyle Evans uint8_t padding_r;
2712aba0eeaSKyle Evans } __stack;
2722aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
2732aba0eeaSKyle Evans const size_t __len = FD_SETSIZE - 1;
2742aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
2752aba0eeaSKyle Evans
2762aba0eeaSKyle Evans __stack.__buf = malloc(__bufsz);
2772aba0eeaSKyle Evans
2782aba0eeaSKyle Evans FD_SET(__idx, __stack.__buf);
2792aba0eeaSKyle Evans #undef BUF
2802aba0eeaSKyle Evans
2812aba0eeaSKyle Evans }
2822aba0eeaSKyle Evans
28309cdbf04SKyle Evans ATF_TC(FD_SET_heap_end);
ATF_TC_HEAD(FD_SET_heap_end,tc)28409cdbf04SKyle Evans ATF_TC_HEAD(FD_SET_heap_end, tc)
28509cdbf04SKyle Evans {
28609cdbf04SKyle Evans }
ATF_TC_BODY(FD_SET_heap_end,tc)2872aba0eeaSKyle Evans ATF_TC_BODY(FD_SET_heap_end, tc)
2882aba0eeaSKyle Evans {
2892aba0eeaSKyle Evans #define BUF __stack.__buf
2902aba0eeaSKyle Evans struct {
2912aba0eeaSKyle Evans uint8_t padding_l;
2922aba0eeaSKyle Evans fd_set * __buf;
2932aba0eeaSKyle Evans uint8_t padding_r;
2942aba0eeaSKyle Evans } __stack;
2952aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
2962aba0eeaSKyle Evans const size_t __len = FD_SETSIZE;
2972aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
2982aba0eeaSKyle Evans
2992aba0eeaSKyle Evans __stack.__buf = malloc(__bufsz);
3002aba0eeaSKyle Evans
3012aba0eeaSKyle Evans FD_SET(__idx, __stack.__buf);
3022aba0eeaSKyle Evans #undef BUF
3032aba0eeaSKyle Evans
3042aba0eeaSKyle Evans }
3052aba0eeaSKyle Evans
30609cdbf04SKyle Evans ATF_TC(FD_SET_heap_after_end);
ATF_TC_HEAD(FD_SET_heap_after_end,tc)30709cdbf04SKyle Evans ATF_TC_HEAD(FD_SET_heap_after_end, tc)
30809cdbf04SKyle Evans {
30909cdbf04SKyle Evans }
ATF_TC_BODY(FD_SET_heap_after_end,tc)3102aba0eeaSKyle Evans ATF_TC_BODY(FD_SET_heap_after_end, tc)
3112aba0eeaSKyle Evans {
3122aba0eeaSKyle Evans #define BUF __stack.__buf
3132aba0eeaSKyle Evans struct {
3142aba0eeaSKyle Evans uint8_t padding_l;
3152aba0eeaSKyle Evans fd_set * __buf;
3162aba0eeaSKyle Evans uint8_t padding_r;
3172aba0eeaSKyle Evans } __stack;
3182aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
3192aba0eeaSKyle Evans const size_t __len = FD_SETSIZE + 1;
3202aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
3212aba0eeaSKyle Evans pid_t __child;
3222aba0eeaSKyle Evans int __status;
3232aba0eeaSKyle Evans
3242aba0eeaSKyle Evans __child = fork();
3252aba0eeaSKyle Evans ATF_REQUIRE(__child >= 0);
3262aba0eeaSKyle Evans if (__child > 0)
3272aba0eeaSKyle Evans goto monitor;
3282aba0eeaSKyle Evans
3292aba0eeaSKyle Evans /* Child */
3302aba0eeaSKyle Evans disable_coredumps();
3312aba0eeaSKyle Evans __stack.__buf = malloc(__bufsz);
3322aba0eeaSKyle Evans
3332aba0eeaSKyle Evans FD_SET(__idx, __stack.__buf);
3342aba0eeaSKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
3352aba0eeaSKyle Evans
3362aba0eeaSKyle Evans monitor:
3372aba0eeaSKyle Evans while (waitpid(__child, &__status, 0) != __child) {
3382aba0eeaSKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
3392aba0eeaSKyle Evans }
3402aba0eeaSKyle Evans
3412aba0eeaSKyle Evans if (!WIFSIGNALED(__status)) {
3422aba0eeaSKyle Evans switch (WEXITSTATUS(__status)) {
3432aba0eeaSKyle Evans case EX_SOFTWARE:
3442aba0eeaSKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
3452aba0eeaSKyle Evans break;
3462aba0eeaSKyle Evans case EX_OSERR:
3472aba0eeaSKyle Evans atf_tc_fail("setrlimit(2) failed");
3482aba0eeaSKyle Evans break;
3492aba0eeaSKyle Evans default:
3502aba0eeaSKyle Evans atf_tc_fail("child exited with status %d",
3512aba0eeaSKyle Evans WEXITSTATUS(__status));
3522aba0eeaSKyle Evans }
3532aba0eeaSKyle Evans } else {
3542aba0eeaSKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
3552aba0eeaSKyle Evans }
3562aba0eeaSKyle Evans #undef BUF
3572aba0eeaSKyle Evans
3582aba0eeaSKyle Evans }
3592aba0eeaSKyle Evans
36009cdbf04SKyle Evans ATF_TC(FD_CLR_before_end);
ATF_TC_HEAD(FD_CLR_before_end,tc)36109cdbf04SKyle Evans ATF_TC_HEAD(FD_CLR_before_end, tc)
36209cdbf04SKyle Evans {
36309cdbf04SKyle Evans }
ATF_TC_BODY(FD_CLR_before_end,tc)3642aba0eeaSKyle Evans ATF_TC_BODY(FD_CLR_before_end, tc)
3652aba0eeaSKyle Evans {
3662aba0eeaSKyle Evans #define BUF &__stack.__buf
3672aba0eeaSKyle Evans struct {
3682aba0eeaSKyle Evans uint8_t padding_l;
3692aba0eeaSKyle Evans fd_set __buf;
3702aba0eeaSKyle Evans uint8_t padding_r;
3712aba0eeaSKyle Evans } __stack;
3722aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
3732aba0eeaSKyle Evans const size_t __len = FD_SETSIZE - 1;
3742aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
3752aba0eeaSKyle Evans
3762aba0eeaSKyle Evans FD_CLR(__idx, &__stack.__buf);
3772aba0eeaSKyle Evans #undef BUF
3782aba0eeaSKyle Evans
3792aba0eeaSKyle Evans }
3802aba0eeaSKyle Evans
38109cdbf04SKyle Evans ATF_TC(FD_CLR_end);
ATF_TC_HEAD(FD_CLR_end,tc)38209cdbf04SKyle Evans ATF_TC_HEAD(FD_CLR_end, tc)
38309cdbf04SKyle Evans {
38409cdbf04SKyle Evans }
ATF_TC_BODY(FD_CLR_end,tc)3852aba0eeaSKyle Evans ATF_TC_BODY(FD_CLR_end, tc)
3862aba0eeaSKyle Evans {
3872aba0eeaSKyle Evans #define BUF &__stack.__buf
3882aba0eeaSKyle Evans struct {
3892aba0eeaSKyle Evans uint8_t padding_l;
3902aba0eeaSKyle Evans fd_set __buf;
3912aba0eeaSKyle Evans uint8_t padding_r;
3922aba0eeaSKyle Evans } __stack;
3932aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
3942aba0eeaSKyle Evans const size_t __len = FD_SETSIZE;
3952aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
3962aba0eeaSKyle Evans
3972aba0eeaSKyle Evans FD_CLR(__idx, &__stack.__buf);
3982aba0eeaSKyle Evans #undef BUF
3992aba0eeaSKyle Evans
4002aba0eeaSKyle Evans }
4012aba0eeaSKyle Evans
40209cdbf04SKyle Evans ATF_TC(FD_CLR_after_end);
ATF_TC_HEAD(FD_CLR_after_end,tc)40309cdbf04SKyle Evans ATF_TC_HEAD(FD_CLR_after_end, tc)
40409cdbf04SKyle Evans {
40509cdbf04SKyle Evans }
ATF_TC_BODY(FD_CLR_after_end,tc)4062aba0eeaSKyle Evans ATF_TC_BODY(FD_CLR_after_end, tc)
4072aba0eeaSKyle Evans {
4082aba0eeaSKyle Evans #define BUF &__stack.__buf
4092aba0eeaSKyle Evans struct {
4102aba0eeaSKyle Evans uint8_t padding_l;
4112aba0eeaSKyle Evans fd_set __buf;
4122aba0eeaSKyle Evans uint8_t padding_r;
4132aba0eeaSKyle Evans } __stack;
4142aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
4152aba0eeaSKyle Evans const size_t __len = FD_SETSIZE + 1;
4162aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
4172aba0eeaSKyle Evans pid_t __child;
4182aba0eeaSKyle Evans int __status;
4192aba0eeaSKyle Evans
4202aba0eeaSKyle Evans __child = fork();
4212aba0eeaSKyle Evans ATF_REQUIRE(__child >= 0);
4222aba0eeaSKyle Evans if (__child > 0)
4232aba0eeaSKyle Evans goto monitor;
4242aba0eeaSKyle Evans
4252aba0eeaSKyle Evans /* Child */
4262aba0eeaSKyle Evans disable_coredumps();
4272aba0eeaSKyle Evans FD_CLR(__idx, &__stack.__buf);
4282aba0eeaSKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
4292aba0eeaSKyle Evans
4302aba0eeaSKyle Evans monitor:
4312aba0eeaSKyle Evans while (waitpid(__child, &__status, 0) != __child) {
4322aba0eeaSKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
4332aba0eeaSKyle Evans }
4342aba0eeaSKyle Evans
4352aba0eeaSKyle Evans if (!WIFSIGNALED(__status)) {
4362aba0eeaSKyle Evans switch (WEXITSTATUS(__status)) {
4372aba0eeaSKyle Evans case EX_SOFTWARE:
4382aba0eeaSKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
4392aba0eeaSKyle Evans break;
4402aba0eeaSKyle Evans case EX_OSERR:
4412aba0eeaSKyle Evans atf_tc_fail("setrlimit(2) failed");
4422aba0eeaSKyle Evans break;
4432aba0eeaSKyle Evans default:
4442aba0eeaSKyle Evans atf_tc_fail("child exited with status %d",
4452aba0eeaSKyle Evans WEXITSTATUS(__status));
4462aba0eeaSKyle Evans }
4472aba0eeaSKyle Evans } else {
4482aba0eeaSKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
4492aba0eeaSKyle Evans }
4502aba0eeaSKyle Evans #undef BUF
4512aba0eeaSKyle Evans
4522aba0eeaSKyle Evans }
4532aba0eeaSKyle Evans
45409cdbf04SKyle Evans ATF_TC(FD_CLR_heap_before_end);
ATF_TC_HEAD(FD_CLR_heap_before_end,tc)45509cdbf04SKyle Evans ATF_TC_HEAD(FD_CLR_heap_before_end, tc)
45609cdbf04SKyle Evans {
45709cdbf04SKyle Evans }
ATF_TC_BODY(FD_CLR_heap_before_end,tc)4582aba0eeaSKyle Evans ATF_TC_BODY(FD_CLR_heap_before_end, tc)
4592aba0eeaSKyle Evans {
4602aba0eeaSKyle Evans #define BUF __stack.__buf
4612aba0eeaSKyle Evans struct {
4622aba0eeaSKyle Evans uint8_t padding_l;
4632aba0eeaSKyle Evans fd_set * __buf;
4642aba0eeaSKyle Evans uint8_t padding_r;
4652aba0eeaSKyle Evans } __stack;
4662aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
4672aba0eeaSKyle Evans const size_t __len = FD_SETSIZE - 1;
4682aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
4692aba0eeaSKyle Evans
4702aba0eeaSKyle Evans __stack.__buf = malloc(__bufsz);
4712aba0eeaSKyle Evans
4722aba0eeaSKyle Evans FD_CLR(__idx, __stack.__buf);
4732aba0eeaSKyle Evans #undef BUF
4742aba0eeaSKyle Evans
4752aba0eeaSKyle Evans }
4762aba0eeaSKyle Evans
47709cdbf04SKyle Evans ATF_TC(FD_CLR_heap_end);
ATF_TC_HEAD(FD_CLR_heap_end,tc)47809cdbf04SKyle Evans ATF_TC_HEAD(FD_CLR_heap_end, tc)
47909cdbf04SKyle Evans {
48009cdbf04SKyle Evans }
ATF_TC_BODY(FD_CLR_heap_end,tc)4812aba0eeaSKyle Evans ATF_TC_BODY(FD_CLR_heap_end, tc)
4822aba0eeaSKyle Evans {
4832aba0eeaSKyle Evans #define BUF __stack.__buf
4842aba0eeaSKyle Evans struct {
4852aba0eeaSKyle Evans uint8_t padding_l;
4862aba0eeaSKyle Evans fd_set * __buf;
4872aba0eeaSKyle Evans uint8_t padding_r;
4882aba0eeaSKyle Evans } __stack;
4892aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
4902aba0eeaSKyle Evans const size_t __len = FD_SETSIZE;
4912aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
4922aba0eeaSKyle Evans
4932aba0eeaSKyle Evans __stack.__buf = malloc(__bufsz);
4942aba0eeaSKyle Evans
4952aba0eeaSKyle Evans FD_CLR(__idx, __stack.__buf);
4962aba0eeaSKyle Evans #undef BUF
4972aba0eeaSKyle Evans
4982aba0eeaSKyle Evans }
4992aba0eeaSKyle Evans
50009cdbf04SKyle Evans ATF_TC(FD_CLR_heap_after_end);
ATF_TC_HEAD(FD_CLR_heap_after_end,tc)50109cdbf04SKyle Evans ATF_TC_HEAD(FD_CLR_heap_after_end, tc)
50209cdbf04SKyle Evans {
50309cdbf04SKyle Evans }
ATF_TC_BODY(FD_CLR_heap_after_end,tc)5042aba0eeaSKyle Evans ATF_TC_BODY(FD_CLR_heap_after_end, tc)
5052aba0eeaSKyle Evans {
5062aba0eeaSKyle Evans #define BUF __stack.__buf
5072aba0eeaSKyle Evans struct {
5082aba0eeaSKyle Evans uint8_t padding_l;
5092aba0eeaSKyle Evans fd_set * __buf;
5102aba0eeaSKyle Evans uint8_t padding_r;
5112aba0eeaSKyle Evans } __stack;
5122aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
5132aba0eeaSKyle Evans const size_t __len = FD_SETSIZE + 1;
5142aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
5152aba0eeaSKyle Evans pid_t __child;
5162aba0eeaSKyle Evans int __status;
5172aba0eeaSKyle Evans
5182aba0eeaSKyle Evans __child = fork();
5192aba0eeaSKyle Evans ATF_REQUIRE(__child >= 0);
5202aba0eeaSKyle Evans if (__child > 0)
5212aba0eeaSKyle Evans goto monitor;
5222aba0eeaSKyle Evans
5232aba0eeaSKyle Evans /* Child */
5242aba0eeaSKyle Evans disable_coredumps();
5252aba0eeaSKyle Evans __stack.__buf = malloc(__bufsz);
5262aba0eeaSKyle Evans
5272aba0eeaSKyle Evans FD_CLR(__idx, __stack.__buf);
5282aba0eeaSKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
5292aba0eeaSKyle Evans
5302aba0eeaSKyle Evans monitor:
5312aba0eeaSKyle Evans while (waitpid(__child, &__status, 0) != __child) {
5322aba0eeaSKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
5332aba0eeaSKyle Evans }
5342aba0eeaSKyle Evans
5352aba0eeaSKyle Evans if (!WIFSIGNALED(__status)) {
5362aba0eeaSKyle Evans switch (WEXITSTATUS(__status)) {
5372aba0eeaSKyle Evans case EX_SOFTWARE:
5382aba0eeaSKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
5392aba0eeaSKyle Evans break;
5402aba0eeaSKyle Evans case EX_OSERR:
5412aba0eeaSKyle Evans atf_tc_fail("setrlimit(2) failed");
5422aba0eeaSKyle Evans break;
5432aba0eeaSKyle Evans default:
5442aba0eeaSKyle Evans atf_tc_fail("child exited with status %d",
5452aba0eeaSKyle Evans WEXITSTATUS(__status));
5462aba0eeaSKyle Evans }
5472aba0eeaSKyle Evans } else {
5482aba0eeaSKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
5492aba0eeaSKyle Evans }
5502aba0eeaSKyle Evans #undef BUF
5512aba0eeaSKyle Evans
5522aba0eeaSKyle Evans }
5532aba0eeaSKyle Evans
55409cdbf04SKyle Evans ATF_TC(FD_ISSET_before_end);
ATF_TC_HEAD(FD_ISSET_before_end,tc)55509cdbf04SKyle Evans ATF_TC_HEAD(FD_ISSET_before_end, tc)
55609cdbf04SKyle Evans {
55709cdbf04SKyle Evans }
ATF_TC_BODY(FD_ISSET_before_end,tc)5582aba0eeaSKyle Evans ATF_TC_BODY(FD_ISSET_before_end, tc)
5592aba0eeaSKyle Evans {
5602aba0eeaSKyle Evans #define BUF &__stack.__buf
5612aba0eeaSKyle Evans struct {
5622aba0eeaSKyle Evans uint8_t padding_l;
5632aba0eeaSKyle Evans fd_set __buf;
5642aba0eeaSKyle Evans uint8_t padding_r;
5652aba0eeaSKyle Evans } __stack;
5662aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
5672aba0eeaSKyle Evans const size_t __len = FD_SETSIZE - 1;
5682aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
5692aba0eeaSKyle Evans
5702aba0eeaSKyle Evans FD_ISSET(__idx, &__stack.__buf);
5712aba0eeaSKyle Evans #undef BUF
5722aba0eeaSKyle Evans
5732aba0eeaSKyle Evans }
5742aba0eeaSKyle Evans
57509cdbf04SKyle Evans ATF_TC(FD_ISSET_end);
ATF_TC_HEAD(FD_ISSET_end,tc)57609cdbf04SKyle Evans ATF_TC_HEAD(FD_ISSET_end, tc)
57709cdbf04SKyle Evans {
57809cdbf04SKyle Evans }
ATF_TC_BODY(FD_ISSET_end,tc)5792aba0eeaSKyle Evans ATF_TC_BODY(FD_ISSET_end, tc)
5802aba0eeaSKyle Evans {
5812aba0eeaSKyle Evans #define BUF &__stack.__buf
5822aba0eeaSKyle Evans struct {
5832aba0eeaSKyle Evans uint8_t padding_l;
5842aba0eeaSKyle Evans fd_set __buf;
5852aba0eeaSKyle Evans uint8_t padding_r;
5862aba0eeaSKyle Evans } __stack;
5872aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
5882aba0eeaSKyle Evans const size_t __len = FD_SETSIZE;
5892aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
5902aba0eeaSKyle Evans
5912aba0eeaSKyle Evans FD_ISSET(__idx, &__stack.__buf);
5922aba0eeaSKyle Evans #undef BUF
5932aba0eeaSKyle Evans
5942aba0eeaSKyle Evans }
5952aba0eeaSKyle Evans
59609cdbf04SKyle Evans ATF_TC(FD_ISSET_after_end);
ATF_TC_HEAD(FD_ISSET_after_end,tc)59709cdbf04SKyle Evans ATF_TC_HEAD(FD_ISSET_after_end, tc)
59809cdbf04SKyle Evans {
59909cdbf04SKyle Evans }
ATF_TC_BODY(FD_ISSET_after_end,tc)6002aba0eeaSKyle Evans ATF_TC_BODY(FD_ISSET_after_end, tc)
6012aba0eeaSKyle Evans {
6022aba0eeaSKyle Evans #define BUF &__stack.__buf
6032aba0eeaSKyle Evans struct {
6042aba0eeaSKyle Evans uint8_t padding_l;
6052aba0eeaSKyle Evans fd_set __buf;
6062aba0eeaSKyle Evans uint8_t padding_r;
6072aba0eeaSKyle Evans } __stack;
6082aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
6092aba0eeaSKyle Evans const size_t __len = FD_SETSIZE + 1;
6102aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
6112aba0eeaSKyle Evans pid_t __child;
6122aba0eeaSKyle Evans int __status;
6132aba0eeaSKyle Evans
6142aba0eeaSKyle Evans __child = fork();
6152aba0eeaSKyle Evans ATF_REQUIRE(__child >= 0);
6162aba0eeaSKyle Evans if (__child > 0)
6172aba0eeaSKyle Evans goto monitor;
6182aba0eeaSKyle Evans
6192aba0eeaSKyle Evans /* Child */
6202aba0eeaSKyle Evans disable_coredumps();
6212aba0eeaSKyle Evans FD_ISSET(__idx, &__stack.__buf);
6222aba0eeaSKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
6232aba0eeaSKyle Evans
6242aba0eeaSKyle Evans monitor:
6252aba0eeaSKyle Evans while (waitpid(__child, &__status, 0) != __child) {
6262aba0eeaSKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
6272aba0eeaSKyle Evans }
6282aba0eeaSKyle Evans
6292aba0eeaSKyle Evans if (!WIFSIGNALED(__status)) {
6302aba0eeaSKyle Evans switch (WEXITSTATUS(__status)) {
6312aba0eeaSKyle Evans case EX_SOFTWARE:
6322aba0eeaSKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
6332aba0eeaSKyle Evans break;
6342aba0eeaSKyle Evans case EX_OSERR:
6352aba0eeaSKyle Evans atf_tc_fail("setrlimit(2) failed");
6362aba0eeaSKyle Evans break;
6372aba0eeaSKyle Evans default:
6382aba0eeaSKyle Evans atf_tc_fail("child exited with status %d",
6392aba0eeaSKyle Evans WEXITSTATUS(__status));
6402aba0eeaSKyle Evans }
6412aba0eeaSKyle Evans } else {
6422aba0eeaSKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
6432aba0eeaSKyle Evans }
6442aba0eeaSKyle Evans #undef BUF
6452aba0eeaSKyle Evans
6462aba0eeaSKyle Evans }
6472aba0eeaSKyle Evans
64809cdbf04SKyle Evans ATF_TC(FD_ISSET_heap_before_end);
ATF_TC_HEAD(FD_ISSET_heap_before_end,tc)64909cdbf04SKyle Evans ATF_TC_HEAD(FD_ISSET_heap_before_end, tc)
65009cdbf04SKyle Evans {
65109cdbf04SKyle Evans }
ATF_TC_BODY(FD_ISSET_heap_before_end,tc)6522aba0eeaSKyle Evans ATF_TC_BODY(FD_ISSET_heap_before_end, tc)
6532aba0eeaSKyle Evans {
6542aba0eeaSKyle Evans #define BUF __stack.__buf
6552aba0eeaSKyle Evans struct {
6562aba0eeaSKyle Evans uint8_t padding_l;
6572aba0eeaSKyle Evans fd_set * __buf;
6582aba0eeaSKyle Evans uint8_t padding_r;
6592aba0eeaSKyle Evans } __stack;
6602aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
6612aba0eeaSKyle Evans const size_t __len = FD_SETSIZE - 1;
6622aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
6632aba0eeaSKyle Evans
6642aba0eeaSKyle Evans __stack.__buf = malloc(__bufsz);
6652aba0eeaSKyle Evans
6662aba0eeaSKyle Evans FD_ISSET(__idx, __stack.__buf);
6672aba0eeaSKyle Evans #undef BUF
6682aba0eeaSKyle Evans
6692aba0eeaSKyle Evans }
6702aba0eeaSKyle Evans
67109cdbf04SKyle Evans ATF_TC(FD_ISSET_heap_end);
ATF_TC_HEAD(FD_ISSET_heap_end,tc)67209cdbf04SKyle Evans ATF_TC_HEAD(FD_ISSET_heap_end, tc)
67309cdbf04SKyle Evans {
67409cdbf04SKyle Evans }
ATF_TC_BODY(FD_ISSET_heap_end,tc)6752aba0eeaSKyle Evans ATF_TC_BODY(FD_ISSET_heap_end, tc)
6762aba0eeaSKyle Evans {
6772aba0eeaSKyle Evans #define BUF __stack.__buf
6782aba0eeaSKyle Evans struct {
6792aba0eeaSKyle Evans uint8_t padding_l;
6802aba0eeaSKyle Evans fd_set * __buf;
6812aba0eeaSKyle Evans uint8_t padding_r;
6822aba0eeaSKyle Evans } __stack;
6832aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
6842aba0eeaSKyle Evans const size_t __len = FD_SETSIZE;
6852aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
6862aba0eeaSKyle Evans
6872aba0eeaSKyle Evans __stack.__buf = malloc(__bufsz);
6882aba0eeaSKyle Evans
6892aba0eeaSKyle Evans FD_ISSET(__idx, __stack.__buf);
6902aba0eeaSKyle Evans #undef BUF
6912aba0eeaSKyle Evans
6922aba0eeaSKyle Evans }
6932aba0eeaSKyle Evans
69409cdbf04SKyle Evans ATF_TC(FD_ISSET_heap_after_end);
ATF_TC_HEAD(FD_ISSET_heap_after_end,tc)69509cdbf04SKyle Evans ATF_TC_HEAD(FD_ISSET_heap_after_end, tc)
69609cdbf04SKyle Evans {
69709cdbf04SKyle Evans }
ATF_TC_BODY(FD_ISSET_heap_after_end,tc)6982aba0eeaSKyle Evans ATF_TC_BODY(FD_ISSET_heap_after_end, tc)
6992aba0eeaSKyle Evans {
7002aba0eeaSKyle Evans #define BUF __stack.__buf
7012aba0eeaSKyle Evans struct {
7022aba0eeaSKyle Evans uint8_t padding_l;
7032aba0eeaSKyle Evans fd_set * __buf;
7042aba0eeaSKyle Evans uint8_t padding_r;
7052aba0eeaSKyle Evans } __stack;
7062aba0eeaSKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
7072aba0eeaSKyle Evans const size_t __len = FD_SETSIZE + 1;
7082aba0eeaSKyle Evans const size_t __idx __unused = __len - 1;
7092aba0eeaSKyle Evans pid_t __child;
7102aba0eeaSKyle Evans int __status;
7112aba0eeaSKyle Evans
7122aba0eeaSKyle Evans __child = fork();
7132aba0eeaSKyle Evans ATF_REQUIRE(__child >= 0);
7142aba0eeaSKyle Evans if (__child > 0)
7152aba0eeaSKyle Evans goto monitor;
7162aba0eeaSKyle Evans
7172aba0eeaSKyle Evans /* Child */
7182aba0eeaSKyle Evans disable_coredumps();
7192aba0eeaSKyle Evans __stack.__buf = malloc(__bufsz);
7202aba0eeaSKyle Evans
7212aba0eeaSKyle Evans FD_ISSET(__idx, __stack.__buf);
7222aba0eeaSKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
7232aba0eeaSKyle Evans
7242aba0eeaSKyle Evans monitor:
7252aba0eeaSKyle Evans while (waitpid(__child, &__status, 0) != __child) {
7262aba0eeaSKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
7272aba0eeaSKyle Evans }
7282aba0eeaSKyle Evans
7292aba0eeaSKyle Evans if (!WIFSIGNALED(__status)) {
7302aba0eeaSKyle Evans switch (WEXITSTATUS(__status)) {
7312aba0eeaSKyle Evans case EX_SOFTWARE:
7322aba0eeaSKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
7332aba0eeaSKyle Evans break;
7342aba0eeaSKyle Evans case EX_OSERR:
7352aba0eeaSKyle Evans atf_tc_fail("setrlimit(2) failed");
7362aba0eeaSKyle Evans break;
7372aba0eeaSKyle Evans default:
7382aba0eeaSKyle Evans atf_tc_fail("child exited with status %d",
7392aba0eeaSKyle Evans WEXITSTATUS(__status));
7402aba0eeaSKyle Evans }
7412aba0eeaSKyle Evans } else {
7422aba0eeaSKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
7432aba0eeaSKyle Evans }
7442aba0eeaSKyle Evans #undef BUF
7452aba0eeaSKyle Evans
7462aba0eeaSKyle Evans }
7472aba0eeaSKyle Evans
ATF_TP_ADD_TCS(tp)7482aba0eeaSKyle Evans ATF_TP_ADD_TCS(tp)
7492aba0eeaSKyle Evans {
7502aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_SET_before_end);
7512aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_SET_end);
7522aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_SET_after_end);
7532aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_SET_heap_before_end);
7542aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_SET_heap_end);
7552aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_SET_heap_after_end);
7562aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_CLR_before_end);
7572aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_CLR_end);
7582aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_CLR_after_end);
7592aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_CLR_heap_before_end);
7602aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_CLR_heap_end);
7612aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_CLR_heap_after_end);
7622aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_ISSET_before_end);
7632aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_ISSET_end);
7642aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_ISSET_after_end);
7652aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_ISSET_heap_before_end);
7662aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_ISSET_heap_end);
7672aba0eeaSKyle Evans ATF_TP_ADD_TC(tp, FD_ISSET_heap_after_end);
7682aba0eeaSKyle Evans return (atf_no_error());
7692aba0eeaSKyle Evans }
770