11f155d48SKyle Evans /* @generated by `generate-fortify-tests.lua "socket"` */
21f155d48SKyle Evans
31f155d48SKyle Evans #define _FORTIFY_SOURCE 2
41f155d48SKyle Evans #define TMPFILE_SIZE (1024 * 32)
51f155d48SKyle Evans
61f155d48SKyle Evans #include <sys/param.h>
7*22178cb2SKyle Evans #include <sys/jail.h>
81f155d48SKyle Evans #include <sys/random.h>
91f155d48SKyle Evans #include <sys/resource.h>
101f155d48SKyle Evans #include <sys/select.h>
111f155d48SKyle Evans #include <sys/socket.h>
121f155d48SKyle Evans #include <sys/time.h>
131f155d48SKyle Evans #include <sys/uio.h>
141f155d48SKyle Evans #include <sys/wait.h>
151f155d48SKyle Evans #include <dirent.h>
161f155d48SKyle Evans #include <errno.h>
171f155d48SKyle Evans #include <fcntl.h>
181f155d48SKyle Evans #include <limits.h>
191f155d48SKyle Evans #include <poll.h>
201f155d48SKyle Evans #include <signal.h>
211f155d48SKyle Evans #include <stdio.h>
221f155d48SKyle Evans #include <stdlib.h>
231f155d48SKyle Evans #include <string.h>
241f155d48SKyle Evans #include <strings.h>
251f155d48SKyle Evans #include <sysexits.h>
261f155d48SKyle Evans #include <unistd.h>
271f155d48SKyle Evans #include <wchar.h>
281f155d48SKyle Evans #include <atf-c.h>
291f155d48SKyle Evans
301f155d48SKyle Evans static FILE * __unused
new_fp(size_t __len)311f155d48SKyle Evans new_fp(size_t __len)
321f155d48SKyle Evans {
331f155d48SKyle Evans static char fpbuf[LINE_MAX];
341f155d48SKyle Evans FILE *fp;
351f155d48SKyle Evans
361f155d48SKyle Evans ATF_REQUIRE(__len <= sizeof(fpbuf));
371f155d48SKyle Evans
381f155d48SKyle Evans memset(fpbuf, 'A', sizeof(fpbuf) - 1);
391f155d48SKyle Evans fpbuf[sizeof(fpbuf) - 1] = '\0';
401f155d48SKyle Evans
411f155d48SKyle Evans fp = fmemopen(fpbuf, sizeof(fpbuf), "rb");
421f155d48SKyle Evans ATF_REQUIRE(fp != NULL);
431f155d48SKyle Evans
441f155d48SKyle Evans return (fp);
451f155d48SKyle Evans }
461f155d48SKyle Evans
471f155d48SKyle Evans /*
481f155d48SKyle Evans * Create a new symlink to use for readlink(2) style tests, we'll just use a
491f155d48SKyle Evans * random target name to have something interesting to look at.
501f155d48SKyle Evans */
511f155d48SKyle Evans static const char * __unused
new_symlink(size_t __len)521f155d48SKyle Evans new_symlink(size_t __len)
531f155d48SKyle Evans {
541f155d48SKyle Evans static const char linkname[] = "link";
551f155d48SKyle Evans char target[MAXNAMLEN];
561f155d48SKyle Evans int error;
571f155d48SKyle Evans
581f155d48SKyle Evans ATF_REQUIRE(__len <= sizeof(target));
591f155d48SKyle Evans
601f155d48SKyle Evans arc4random_buf(target, sizeof(target));
611f155d48SKyle Evans
621f155d48SKyle Evans error = unlink(linkname);
631f155d48SKyle Evans ATF_REQUIRE(error == 0 || errno == ENOENT);
641f155d48SKyle Evans
651f155d48SKyle Evans error = symlink(target, linkname);
661f155d48SKyle Evans ATF_REQUIRE(error == 0);
671f155d48SKyle Evans
681f155d48SKyle Evans return (linkname);
691f155d48SKyle Evans }
701f155d48SKyle Evans
711f155d48SKyle 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 /*
1161f155d48SKyle Evans * Constructs a tmpfile that we can use for testing read(2) and friends.
1171f155d48SKyle Evans */
1181f155d48SKyle Evans static int __unused
new_tmpfile(void)1191f155d48SKyle Evans new_tmpfile(void)
1201f155d48SKyle Evans {
1211f155d48SKyle Evans char buf[1024];
1221f155d48SKyle Evans ssize_t rv;
1231f155d48SKyle Evans size_t written;
1241f155d48SKyle Evans int fd;
1251f155d48SKyle Evans
1261f155d48SKyle Evans fd = open("tmpfile", O_RDWR | O_CREAT | O_TRUNC, 0644);
1271f155d48SKyle Evans ATF_REQUIRE(fd >= 0);
1281f155d48SKyle Evans
1291f155d48SKyle Evans written = 0;
1301f155d48SKyle Evans while (written < TMPFILE_SIZE) {
1311f155d48SKyle Evans rv = write(fd, buf, sizeof(buf));
1321f155d48SKyle Evans ATF_REQUIRE(rv > 0);
1331f155d48SKyle Evans
1341f155d48SKyle Evans written += rv;
1351f155d48SKyle Evans }
1361f155d48SKyle Evans
1371f155d48SKyle Evans ATF_REQUIRE_EQ(0, lseek(fd, 0, SEEK_SET));
1381f155d48SKyle Evans return (fd);
1391f155d48SKyle Evans }
1401f155d48SKyle Evans
1411f155d48SKyle Evans static void
disable_coredumps(void)1421f155d48SKyle Evans disable_coredumps(void)
1431f155d48SKyle Evans {
1441f155d48SKyle Evans struct rlimit rl = { 0 };
1451f155d48SKyle Evans
1461f155d48SKyle Evans if (setrlimit(RLIMIT_CORE, &rl) == -1)
1471f155d48SKyle Evans _exit(EX_OSERR);
1481f155d48SKyle Evans }
1491f155d48SKyle Evans
1501f155d48SKyle Evans /*
1511f155d48SKyle Evans * Replaces stdin with a file that we can actually read from, for tests where
1521f155d48SKyle Evans * we want a FILE * or fd that we can get data from.
1531f155d48SKyle Evans */
1541f155d48SKyle Evans static void __unused
replace_stdin(void)1551f155d48SKyle Evans replace_stdin(void)
1561f155d48SKyle Evans {
1571f155d48SKyle Evans int fd;
1581f155d48SKyle Evans
1591f155d48SKyle Evans fd = new_tmpfile();
1601f155d48SKyle Evans
1611f155d48SKyle Evans (void)dup2(fd, STDIN_FILENO);
1621f155d48SKyle Evans if (fd != STDIN_FILENO)
1631f155d48SKyle Evans close(fd);
1641f155d48SKyle Evans }
1651f155d48SKyle Evans
16609cdbf04SKyle Evans ATF_TC(getpeername_before_end);
ATF_TC_HEAD(getpeername_before_end,tc)16709cdbf04SKyle Evans ATF_TC_HEAD(getpeername_before_end, tc)
16809cdbf04SKyle Evans {
16909cdbf04SKyle Evans }
ATF_TC_BODY(getpeername_before_end,tc)1701f155d48SKyle Evans ATF_TC_BODY(getpeername_before_end, tc)
1711f155d48SKyle Evans {
1721f155d48SKyle Evans #define BUF &__stack.__buf
1731f155d48SKyle Evans struct {
1741f155d48SKyle Evans uint8_t padding_l;
1751f155d48SKyle Evans struct sockaddr __buf;
1761f155d48SKyle Evans uint8_t padding_r;
1771f155d48SKyle Evans } __stack;
1781f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
1791f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) - 1;
1801f155d48SKyle Evans const size_t __idx __unused = __len - 1;
1811f155d48SKyle Evans int sock[2] = { -1, -1 };
1821f155d48SKyle Evans socklen_t socklen;
1831f155d48SKyle Evans new_socket(sock);
1841f155d48SKyle Evans socklen = __len;
1851f155d48SKyle Evans
1861f155d48SKyle Evans getpeername(sock[0], &__stack.__buf, &socklen);
1871f155d48SKyle Evans #undef BUF
1881f155d48SKyle Evans
1891f155d48SKyle Evans }
1901f155d48SKyle Evans
19109cdbf04SKyle Evans ATF_TC(getpeername_end);
ATF_TC_HEAD(getpeername_end,tc)19209cdbf04SKyle Evans ATF_TC_HEAD(getpeername_end, tc)
19309cdbf04SKyle Evans {
19409cdbf04SKyle Evans }
ATF_TC_BODY(getpeername_end,tc)1951f155d48SKyle Evans ATF_TC_BODY(getpeername_end, tc)
1961f155d48SKyle Evans {
1971f155d48SKyle Evans #define BUF &__stack.__buf
1981f155d48SKyle Evans struct {
1991f155d48SKyle Evans uint8_t padding_l;
2001f155d48SKyle Evans struct sockaddr __buf;
2011f155d48SKyle Evans uint8_t padding_r;
2021f155d48SKyle Evans } __stack;
2031f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
2041f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr);
2051f155d48SKyle Evans const size_t __idx __unused = __len - 1;
2061f155d48SKyle Evans int sock[2] = { -1, -1 };
2071f155d48SKyle Evans socklen_t socklen;
2081f155d48SKyle Evans new_socket(sock);
2091f155d48SKyle Evans socklen = __len;
2101f155d48SKyle Evans
2111f155d48SKyle Evans getpeername(sock[0], &__stack.__buf, &socklen);
2121f155d48SKyle Evans #undef BUF
2131f155d48SKyle Evans
2141f155d48SKyle Evans }
2151f155d48SKyle Evans
21609cdbf04SKyle Evans ATF_TC(getpeername_heap_before_end);
ATF_TC_HEAD(getpeername_heap_before_end,tc)21709cdbf04SKyle Evans ATF_TC_HEAD(getpeername_heap_before_end, tc)
21809cdbf04SKyle Evans {
21909cdbf04SKyle Evans }
ATF_TC_BODY(getpeername_heap_before_end,tc)2201f155d48SKyle Evans ATF_TC_BODY(getpeername_heap_before_end, tc)
2211f155d48SKyle Evans {
2221f155d48SKyle Evans #define BUF __stack.__buf
2231f155d48SKyle Evans struct {
2241f155d48SKyle Evans uint8_t padding_l;
2251f155d48SKyle Evans struct sockaddr * __buf;
2261f155d48SKyle Evans uint8_t padding_r;
2271f155d48SKyle Evans } __stack;
2281f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
2291f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) - 1;
2301f155d48SKyle Evans const size_t __idx __unused = __len - 1;
2311f155d48SKyle Evans int sock[2] = { -1, -1 };
2321f155d48SKyle Evans socklen_t socklen;
2331f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
2341f155d48SKyle Evans new_socket(sock);
2351f155d48SKyle Evans socklen = __len;
2361f155d48SKyle Evans
2371f155d48SKyle Evans getpeername(sock[0], __stack.__buf, &socklen);
2381f155d48SKyle Evans #undef BUF
2391f155d48SKyle Evans
2401f155d48SKyle Evans }
2411f155d48SKyle Evans
24209cdbf04SKyle Evans ATF_TC(getpeername_heap_end);
ATF_TC_HEAD(getpeername_heap_end,tc)24309cdbf04SKyle Evans ATF_TC_HEAD(getpeername_heap_end, tc)
24409cdbf04SKyle Evans {
24509cdbf04SKyle Evans }
ATF_TC_BODY(getpeername_heap_end,tc)2461f155d48SKyle Evans ATF_TC_BODY(getpeername_heap_end, tc)
2471f155d48SKyle Evans {
2481f155d48SKyle Evans #define BUF __stack.__buf
2491f155d48SKyle Evans struct {
2501f155d48SKyle Evans uint8_t padding_l;
2511f155d48SKyle Evans struct sockaddr * __buf;
2521f155d48SKyle Evans uint8_t padding_r;
2531f155d48SKyle Evans } __stack;
2541f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
2551f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr);
2561f155d48SKyle Evans const size_t __idx __unused = __len - 1;
2571f155d48SKyle Evans int sock[2] = { -1, -1 };
2581f155d48SKyle Evans socklen_t socklen;
2591f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
2601f155d48SKyle Evans new_socket(sock);
2611f155d48SKyle Evans socklen = __len;
2621f155d48SKyle Evans
2631f155d48SKyle Evans getpeername(sock[0], __stack.__buf, &socklen);
2641f155d48SKyle Evans #undef BUF
2651f155d48SKyle Evans
2661f155d48SKyle Evans }
2671f155d48SKyle Evans
26809cdbf04SKyle Evans ATF_TC(getpeername_heap_after_end);
ATF_TC_HEAD(getpeername_heap_after_end,tc)26909cdbf04SKyle Evans ATF_TC_HEAD(getpeername_heap_after_end, tc)
27009cdbf04SKyle Evans {
27109cdbf04SKyle Evans }
ATF_TC_BODY(getpeername_heap_after_end,tc)2721f155d48SKyle Evans ATF_TC_BODY(getpeername_heap_after_end, tc)
2731f155d48SKyle Evans {
2741f155d48SKyle Evans #define BUF __stack.__buf
2751f155d48SKyle Evans struct {
2761f155d48SKyle Evans uint8_t padding_l;
2771f155d48SKyle Evans struct sockaddr * __buf;
2781f155d48SKyle Evans uint8_t padding_r;
2791f155d48SKyle Evans } __stack;
2801f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
2811f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) + 1;
2821f155d48SKyle Evans const size_t __idx __unused = __len - 1;
2831f155d48SKyle Evans pid_t __child;
2841f155d48SKyle Evans int __status;
2851f155d48SKyle Evans int sock[2] = { -1, -1 };
2861f155d48SKyle Evans socklen_t socklen;
2871f155d48SKyle Evans __child = fork();
2881f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
2891f155d48SKyle Evans if (__child > 0)
2901f155d48SKyle Evans goto monitor;
2911f155d48SKyle Evans
2921f155d48SKyle Evans /* Child */
2931f155d48SKyle Evans disable_coredumps();
2941f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
2951f155d48SKyle Evans new_socket(sock);
2961f155d48SKyle Evans socklen = __len;
2971f155d48SKyle Evans
2981f155d48SKyle Evans getpeername(sock[0], __stack.__buf, &socklen);
2991f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
3001f155d48SKyle Evans
3011f155d48SKyle Evans monitor:
3021f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
3031f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
3041f155d48SKyle Evans }
3051f155d48SKyle Evans
3061f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
3071f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
3081f155d48SKyle Evans case EX_SOFTWARE:
3091f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
3101f155d48SKyle Evans break;
3111f155d48SKyle Evans case EX_OSERR:
3121f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
3131f155d48SKyle Evans break;
3141f155d48SKyle Evans default:
3151f155d48SKyle Evans atf_tc_fail("child exited with status %d",
3161f155d48SKyle Evans WEXITSTATUS(__status));
3171f155d48SKyle Evans }
3181f155d48SKyle Evans } else {
3191f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
3201f155d48SKyle Evans }
3211f155d48SKyle Evans #undef BUF
3221f155d48SKyle Evans
3231f155d48SKyle Evans }
3241f155d48SKyle Evans
32509cdbf04SKyle Evans ATF_TC(getsockname_before_end);
ATF_TC_HEAD(getsockname_before_end,tc)32609cdbf04SKyle Evans ATF_TC_HEAD(getsockname_before_end, tc)
32709cdbf04SKyle Evans {
32809cdbf04SKyle Evans }
ATF_TC_BODY(getsockname_before_end,tc)3291f155d48SKyle Evans ATF_TC_BODY(getsockname_before_end, tc)
3301f155d48SKyle Evans {
3311f155d48SKyle Evans #define BUF &__stack.__buf
3321f155d48SKyle Evans struct {
3331f155d48SKyle Evans uint8_t padding_l;
3341f155d48SKyle Evans struct sockaddr __buf;
3351f155d48SKyle Evans uint8_t padding_r;
3361f155d48SKyle Evans } __stack;
3371f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
3381f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) - 1;
3391f155d48SKyle Evans const size_t __idx __unused = __len - 1;
3401f155d48SKyle Evans int sock[2] = { -1, -1 };
3411f155d48SKyle Evans socklen_t socklen;
3421f155d48SKyle Evans new_socket(sock);
3431f155d48SKyle Evans socklen = __len;
3441f155d48SKyle Evans
3451f155d48SKyle Evans getsockname(sock[0], &__stack.__buf, &socklen);
3461f155d48SKyle Evans #undef BUF
3471f155d48SKyle Evans
3481f155d48SKyle Evans }
3491f155d48SKyle Evans
35009cdbf04SKyle Evans ATF_TC(getsockname_end);
ATF_TC_HEAD(getsockname_end,tc)35109cdbf04SKyle Evans ATF_TC_HEAD(getsockname_end, tc)
35209cdbf04SKyle Evans {
35309cdbf04SKyle Evans }
ATF_TC_BODY(getsockname_end,tc)3541f155d48SKyle Evans ATF_TC_BODY(getsockname_end, tc)
3551f155d48SKyle Evans {
3561f155d48SKyle Evans #define BUF &__stack.__buf
3571f155d48SKyle Evans struct {
3581f155d48SKyle Evans uint8_t padding_l;
3591f155d48SKyle Evans struct sockaddr __buf;
3601f155d48SKyle Evans uint8_t padding_r;
3611f155d48SKyle Evans } __stack;
3621f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
3631f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr);
3641f155d48SKyle Evans const size_t __idx __unused = __len - 1;
3651f155d48SKyle Evans int sock[2] = { -1, -1 };
3661f155d48SKyle Evans socklen_t socklen;
3671f155d48SKyle Evans new_socket(sock);
3681f155d48SKyle Evans socklen = __len;
3691f155d48SKyle Evans
3701f155d48SKyle Evans getsockname(sock[0], &__stack.__buf, &socklen);
3711f155d48SKyle Evans #undef BUF
3721f155d48SKyle Evans
3731f155d48SKyle Evans }
3741f155d48SKyle Evans
37509cdbf04SKyle Evans ATF_TC(getsockname_heap_before_end);
ATF_TC_HEAD(getsockname_heap_before_end,tc)37609cdbf04SKyle Evans ATF_TC_HEAD(getsockname_heap_before_end, tc)
37709cdbf04SKyle Evans {
37809cdbf04SKyle Evans }
ATF_TC_BODY(getsockname_heap_before_end,tc)3791f155d48SKyle Evans ATF_TC_BODY(getsockname_heap_before_end, tc)
3801f155d48SKyle Evans {
3811f155d48SKyle Evans #define BUF __stack.__buf
3821f155d48SKyle Evans struct {
3831f155d48SKyle Evans uint8_t padding_l;
3841f155d48SKyle Evans struct sockaddr * __buf;
3851f155d48SKyle Evans uint8_t padding_r;
3861f155d48SKyle Evans } __stack;
3871f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
3881f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) - 1;
3891f155d48SKyle Evans const size_t __idx __unused = __len - 1;
3901f155d48SKyle Evans int sock[2] = { -1, -1 };
3911f155d48SKyle Evans socklen_t socklen;
3921f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
3931f155d48SKyle Evans new_socket(sock);
3941f155d48SKyle Evans socklen = __len;
3951f155d48SKyle Evans
3961f155d48SKyle Evans getsockname(sock[0], __stack.__buf, &socklen);
3971f155d48SKyle Evans #undef BUF
3981f155d48SKyle Evans
3991f155d48SKyle Evans }
4001f155d48SKyle Evans
40109cdbf04SKyle Evans ATF_TC(getsockname_heap_end);
ATF_TC_HEAD(getsockname_heap_end,tc)40209cdbf04SKyle Evans ATF_TC_HEAD(getsockname_heap_end, tc)
40309cdbf04SKyle Evans {
40409cdbf04SKyle Evans }
ATF_TC_BODY(getsockname_heap_end,tc)4051f155d48SKyle Evans ATF_TC_BODY(getsockname_heap_end, tc)
4061f155d48SKyle Evans {
4071f155d48SKyle Evans #define BUF __stack.__buf
4081f155d48SKyle Evans struct {
4091f155d48SKyle Evans uint8_t padding_l;
4101f155d48SKyle Evans struct sockaddr * __buf;
4111f155d48SKyle Evans uint8_t padding_r;
4121f155d48SKyle Evans } __stack;
4131f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
4141f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr);
4151f155d48SKyle Evans const size_t __idx __unused = __len - 1;
4161f155d48SKyle Evans int sock[2] = { -1, -1 };
4171f155d48SKyle Evans socklen_t socklen;
4181f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
4191f155d48SKyle Evans new_socket(sock);
4201f155d48SKyle Evans socklen = __len;
4211f155d48SKyle Evans
4221f155d48SKyle Evans getsockname(sock[0], __stack.__buf, &socklen);
4231f155d48SKyle Evans #undef BUF
4241f155d48SKyle Evans
4251f155d48SKyle Evans }
4261f155d48SKyle Evans
42709cdbf04SKyle Evans ATF_TC(getsockname_heap_after_end);
ATF_TC_HEAD(getsockname_heap_after_end,tc)42809cdbf04SKyle Evans ATF_TC_HEAD(getsockname_heap_after_end, tc)
42909cdbf04SKyle Evans {
43009cdbf04SKyle Evans }
ATF_TC_BODY(getsockname_heap_after_end,tc)4311f155d48SKyle Evans ATF_TC_BODY(getsockname_heap_after_end, tc)
4321f155d48SKyle Evans {
4331f155d48SKyle Evans #define BUF __stack.__buf
4341f155d48SKyle Evans struct {
4351f155d48SKyle Evans uint8_t padding_l;
4361f155d48SKyle Evans struct sockaddr * __buf;
4371f155d48SKyle Evans uint8_t padding_r;
4381f155d48SKyle Evans } __stack;
4391f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
4401f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) + 1;
4411f155d48SKyle Evans const size_t __idx __unused = __len - 1;
4421f155d48SKyle Evans pid_t __child;
4431f155d48SKyle Evans int __status;
4441f155d48SKyle Evans int sock[2] = { -1, -1 };
4451f155d48SKyle Evans socklen_t socklen;
4461f155d48SKyle Evans __child = fork();
4471f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
4481f155d48SKyle Evans if (__child > 0)
4491f155d48SKyle Evans goto monitor;
4501f155d48SKyle Evans
4511f155d48SKyle Evans /* Child */
4521f155d48SKyle Evans disable_coredumps();
4531f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
4541f155d48SKyle Evans new_socket(sock);
4551f155d48SKyle Evans socklen = __len;
4561f155d48SKyle Evans
4571f155d48SKyle Evans getsockname(sock[0], __stack.__buf, &socklen);
4581f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
4591f155d48SKyle Evans
4601f155d48SKyle Evans monitor:
4611f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
4621f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
4631f155d48SKyle Evans }
4641f155d48SKyle Evans
4651f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
4661f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
4671f155d48SKyle Evans case EX_SOFTWARE:
4681f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
4691f155d48SKyle Evans break;
4701f155d48SKyle Evans case EX_OSERR:
4711f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
4721f155d48SKyle Evans break;
4731f155d48SKyle Evans default:
4741f155d48SKyle Evans atf_tc_fail("child exited with status %d",
4751f155d48SKyle Evans WEXITSTATUS(__status));
4761f155d48SKyle Evans }
4771f155d48SKyle Evans } else {
4781f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
4791f155d48SKyle Evans }
4801f155d48SKyle Evans #undef BUF
4811f155d48SKyle Evans
4821f155d48SKyle Evans }
4831f155d48SKyle Evans
48409cdbf04SKyle Evans ATF_TC(recv_before_end);
ATF_TC_HEAD(recv_before_end,tc)48509cdbf04SKyle Evans ATF_TC_HEAD(recv_before_end, tc)
48609cdbf04SKyle Evans {
48709cdbf04SKyle Evans }
ATF_TC_BODY(recv_before_end,tc)4881f155d48SKyle Evans ATF_TC_BODY(recv_before_end, tc)
4891f155d48SKyle Evans {
4901f155d48SKyle Evans #define BUF &__stack.__buf
4911f155d48SKyle Evans struct {
4921f155d48SKyle Evans uint8_t padding_l;
4931f155d48SKyle Evans unsigned char __buf[42];
4941f155d48SKyle Evans uint8_t padding_r;
4951f155d48SKyle Evans } __stack;
4961f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
4971f155d48SKyle Evans const size_t __len = 42 - 1;
4981f155d48SKyle Evans const size_t __idx __unused = __len - 1;
4991f155d48SKyle Evans int sock[2] = { -1, -1 };
5001f155d48SKyle Evans
5011f155d48SKyle Evans new_socket(sock);
5021f155d48SKyle Evans
5031f155d48SKyle Evans recv(sock[0], __stack.__buf, __len, 0);
5041f155d48SKyle Evans #undef BUF
5051f155d48SKyle Evans
5061f155d48SKyle Evans }
5071f155d48SKyle Evans
50809cdbf04SKyle Evans ATF_TC(recv_end);
ATF_TC_HEAD(recv_end,tc)50909cdbf04SKyle Evans ATF_TC_HEAD(recv_end, tc)
51009cdbf04SKyle Evans {
51109cdbf04SKyle Evans }
ATF_TC_BODY(recv_end,tc)5121f155d48SKyle Evans ATF_TC_BODY(recv_end, tc)
5131f155d48SKyle Evans {
5141f155d48SKyle Evans #define BUF &__stack.__buf
5151f155d48SKyle Evans struct {
5161f155d48SKyle Evans uint8_t padding_l;
5171f155d48SKyle Evans unsigned char __buf[42];
5181f155d48SKyle Evans uint8_t padding_r;
5191f155d48SKyle Evans } __stack;
5201f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
5211f155d48SKyle Evans const size_t __len = 42;
5221f155d48SKyle Evans const size_t __idx __unused = __len - 1;
5231f155d48SKyle Evans int sock[2] = { -1, -1 };
5241f155d48SKyle Evans
5251f155d48SKyle Evans new_socket(sock);
5261f155d48SKyle Evans
5271f155d48SKyle Evans recv(sock[0], __stack.__buf, __len, 0);
5281f155d48SKyle Evans #undef BUF
5291f155d48SKyle Evans
5301f155d48SKyle Evans }
5311f155d48SKyle Evans
53209cdbf04SKyle Evans ATF_TC(recv_heap_before_end);
ATF_TC_HEAD(recv_heap_before_end,tc)53309cdbf04SKyle Evans ATF_TC_HEAD(recv_heap_before_end, tc)
53409cdbf04SKyle Evans {
53509cdbf04SKyle Evans }
ATF_TC_BODY(recv_heap_before_end,tc)5361f155d48SKyle Evans ATF_TC_BODY(recv_heap_before_end, tc)
5371f155d48SKyle Evans {
5381f155d48SKyle Evans #define BUF __stack.__buf
5391f155d48SKyle Evans struct {
5401f155d48SKyle Evans uint8_t padding_l;
5411f155d48SKyle Evans unsigned char * __buf;
5421f155d48SKyle Evans uint8_t padding_r;
5431f155d48SKyle Evans } __stack;
5441f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
5451f155d48SKyle Evans const size_t __len = 42 - 1;
5461f155d48SKyle Evans const size_t __idx __unused = __len - 1;
5471f155d48SKyle Evans int sock[2] = { -1, -1 };
5481f155d48SKyle Evans
5491f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
5501f155d48SKyle Evans new_socket(sock);
5511f155d48SKyle Evans
5521f155d48SKyle Evans recv(sock[0], __stack.__buf, __len, 0);
5531f155d48SKyle Evans #undef BUF
5541f155d48SKyle Evans
5551f155d48SKyle Evans }
5561f155d48SKyle Evans
55709cdbf04SKyle Evans ATF_TC(recv_heap_end);
ATF_TC_HEAD(recv_heap_end,tc)55809cdbf04SKyle Evans ATF_TC_HEAD(recv_heap_end, tc)
55909cdbf04SKyle Evans {
56009cdbf04SKyle Evans }
ATF_TC_BODY(recv_heap_end,tc)5611f155d48SKyle Evans ATF_TC_BODY(recv_heap_end, tc)
5621f155d48SKyle Evans {
5631f155d48SKyle Evans #define BUF __stack.__buf
5641f155d48SKyle Evans struct {
5651f155d48SKyle Evans uint8_t padding_l;
5661f155d48SKyle Evans unsigned char * __buf;
5671f155d48SKyle Evans uint8_t padding_r;
5681f155d48SKyle Evans } __stack;
5691f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
5701f155d48SKyle Evans const size_t __len = 42;
5711f155d48SKyle Evans const size_t __idx __unused = __len - 1;
5721f155d48SKyle Evans int sock[2] = { -1, -1 };
5731f155d48SKyle Evans
5741f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
5751f155d48SKyle Evans new_socket(sock);
5761f155d48SKyle Evans
5771f155d48SKyle Evans recv(sock[0], __stack.__buf, __len, 0);
5781f155d48SKyle Evans #undef BUF
5791f155d48SKyle Evans
5801f155d48SKyle Evans }
5811f155d48SKyle Evans
58209cdbf04SKyle Evans ATF_TC(recv_heap_after_end);
ATF_TC_HEAD(recv_heap_after_end,tc)58309cdbf04SKyle Evans ATF_TC_HEAD(recv_heap_after_end, tc)
58409cdbf04SKyle Evans {
58509cdbf04SKyle Evans }
ATF_TC_BODY(recv_heap_after_end,tc)5861f155d48SKyle Evans ATF_TC_BODY(recv_heap_after_end, tc)
5871f155d48SKyle Evans {
5881f155d48SKyle Evans #define BUF __stack.__buf
5891f155d48SKyle Evans struct {
5901f155d48SKyle Evans uint8_t padding_l;
5911f155d48SKyle Evans unsigned char * __buf;
5921f155d48SKyle Evans uint8_t padding_r;
5931f155d48SKyle Evans } __stack;
5941f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
5951f155d48SKyle Evans const size_t __len = 42 + 1;
5961f155d48SKyle Evans const size_t __idx __unused = __len - 1;
5971f155d48SKyle Evans pid_t __child;
5981f155d48SKyle Evans int __status;
5991f155d48SKyle Evans int sock[2] = { -1, -1 };
6001f155d48SKyle Evans
6011f155d48SKyle Evans __child = fork();
6021f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
6031f155d48SKyle Evans if (__child > 0)
6041f155d48SKyle Evans goto monitor;
6051f155d48SKyle Evans
6061f155d48SKyle Evans /* Child */
6071f155d48SKyle Evans disable_coredumps();
6081f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
6091f155d48SKyle Evans new_socket(sock);
6101f155d48SKyle Evans
6111f155d48SKyle Evans recv(sock[0], __stack.__buf, __len, 0);
6121f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
6131f155d48SKyle Evans
6141f155d48SKyle Evans monitor:
6151f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
6161f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
6171f155d48SKyle Evans }
6181f155d48SKyle Evans
6191f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
6201f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
6211f155d48SKyle Evans case EX_SOFTWARE:
6221f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
6231f155d48SKyle Evans break;
6241f155d48SKyle Evans case EX_OSERR:
6251f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
6261f155d48SKyle Evans break;
6271f155d48SKyle Evans default:
6281f155d48SKyle Evans atf_tc_fail("child exited with status %d",
6291f155d48SKyle Evans WEXITSTATUS(__status));
6301f155d48SKyle Evans }
6311f155d48SKyle Evans } else {
6321f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
6331f155d48SKyle Evans }
6341f155d48SKyle Evans #undef BUF
6351f155d48SKyle Evans
6361f155d48SKyle Evans }
6371f155d48SKyle Evans
63809cdbf04SKyle Evans ATF_TC(recvfrom_before_end);
ATF_TC_HEAD(recvfrom_before_end,tc)63909cdbf04SKyle Evans ATF_TC_HEAD(recvfrom_before_end, tc)
64009cdbf04SKyle Evans {
64109cdbf04SKyle Evans }
ATF_TC_BODY(recvfrom_before_end,tc)6421f155d48SKyle Evans ATF_TC_BODY(recvfrom_before_end, tc)
6431f155d48SKyle Evans {
6441f155d48SKyle Evans #define BUF &__stack.__buf
6451f155d48SKyle Evans struct {
6461f155d48SKyle Evans uint8_t padding_l;
6471f155d48SKyle Evans unsigned char __buf[42];
6481f155d48SKyle Evans uint8_t padding_r;
6491f155d48SKyle Evans } __stack;
6501f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
6511f155d48SKyle Evans const size_t __len = 42 - 1;
6521f155d48SKyle Evans const size_t __idx __unused = __len - 1;
6531f155d48SKyle Evans int sock[2] = { -1, -1 };
6541f155d48SKyle Evans
6551f155d48SKyle Evans new_socket(sock);
6561f155d48SKyle Evans
6571f155d48SKyle Evans recvfrom(sock[0], __stack.__buf, __len, 0, NULL, NULL);
6581f155d48SKyle Evans #undef BUF
6591f155d48SKyle Evans
6601f155d48SKyle Evans }
6611f155d48SKyle Evans
66209cdbf04SKyle Evans ATF_TC(recvfrom_end);
ATF_TC_HEAD(recvfrom_end,tc)66309cdbf04SKyle Evans ATF_TC_HEAD(recvfrom_end, tc)
66409cdbf04SKyle Evans {
66509cdbf04SKyle Evans }
ATF_TC_BODY(recvfrom_end,tc)6661f155d48SKyle Evans ATF_TC_BODY(recvfrom_end, tc)
6671f155d48SKyle Evans {
6681f155d48SKyle Evans #define BUF &__stack.__buf
6691f155d48SKyle Evans struct {
6701f155d48SKyle Evans uint8_t padding_l;
6711f155d48SKyle Evans unsigned char __buf[42];
6721f155d48SKyle Evans uint8_t padding_r;
6731f155d48SKyle Evans } __stack;
6741f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
6751f155d48SKyle Evans const size_t __len = 42;
6761f155d48SKyle Evans const size_t __idx __unused = __len - 1;
6771f155d48SKyle Evans int sock[2] = { -1, -1 };
6781f155d48SKyle Evans
6791f155d48SKyle Evans new_socket(sock);
6801f155d48SKyle Evans
6811f155d48SKyle Evans recvfrom(sock[0], __stack.__buf, __len, 0, NULL, NULL);
6821f155d48SKyle Evans #undef BUF
6831f155d48SKyle Evans
6841f155d48SKyle Evans }
6851f155d48SKyle Evans
68609cdbf04SKyle Evans ATF_TC(recvfrom_heap_before_end);
ATF_TC_HEAD(recvfrom_heap_before_end,tc)68709cdbf04SKyle Evans ATF_TC_HEAD(recvfrom_heap_before_end, tc)
68809cdbf04SKyle Evans {
68909cdbf04SKyle Evans }
ATF_TC_BODY(recvfrom_heap_before_end,tc)6901f155d48SKyle Evans ATF_TC_BODY(recvfrom_heap_before_end, tc)
6911f155d48SKyle Evans {
6921f155d48SKyle Evans #define BUF __stack.__buf
6931f155d48SKyle Evans struct {
6941f155d48SKyle Evans uint8_t padding_l;
6951f155d48SKyle Evans unsigned char * __buf;
6961f155d48SKyle Evans uint8_t padding_r;
6971f155d48SKyle Evans } __stack;
6981f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
6991f155d48SKyle Evans const size_t __len = 42 - 1;
7001f155d48SKyle Evans const size_t __idx __unused = __len - 1;
7011f155d48SKyle Evans int sock[2] = { -1, -1 };
7021f155d48SKyle Evans
7031f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
7041f155d48SKyle Evans new_socket(sock);
7051f155d48SKyle Evans
7061f155d48SKyle Evans recvfrom(sock[0], __stack.__buf, __len, 0, NULL, NULL);
7071f155d48SKyle Evans #undef BUF
7081f155d48SKyle Evans
7091f155d48SKyle Evans }
7101f155d48SKyle Evans
71109cdbf04SKyle Evans ATF_TC(recvfrom_heap_end);
ATF_TC_HEAD(recvfrom_heap_end,tc)71209cdbf04SKyle Evans ATF_TC_HEAD(recvfrom_heap_end, tc)
71309cdbf04SKyle Evans {
71409cdbf04SKyle Evans }
ATF_TC_BODY(recvfrom_heap_end,tc)7151f155d48SKyle Evans ATF_TC_BODY(recvfrom_heap_end, tc)
7161f155d48SKyle Evans {
7171f155d48SKyle Evans #define BUF __stack.__buf
7181f155d48SKyle Evans struct {
7191f155d48SKyle Evans uint8_t padding_l;
7201f155d48SKyle Evans unsigned char * __buf;
7211f155d48SKyle Evans uint8_t padding_r;
7221f155d48SKyle Evans } __stack;
7231f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
7241f155d48SKyle Evans const size_t __len = 42;
7251f155d48SKyle Evans const size_t __idx __unused = __len - 1;
7261f155d48SKyle Evans int sock[2] = { -1, -1 };
7271f155d48SKyle Evans
7281f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
7291f155d48SKyle Evans new_socket(sock);
7301f155d48SKyle Evans
7311f155d48SKyle Evans recvfrom(sock[0], __stack.__buf, __len, 0, NULL, NULL);
7321f155d48SKyle Evans #undef BUF
7331f155d48SKyle Evans
7341f155d48SKyle Evans }
7351f155d48SKyle Evans
73609cdbf04SKyle Evans ATF_TC(recvfrom_heap_after_end);
ATF_TC_HEAD(recvfrom_heap_after_end,tc)73709cdbf04SKyle Evans ATF_TC_HEAD(recvfrom_heap_after_end, tc)
73809cdbf04SKyle Evans {
73909cdbf04SKyle Evans }
ATF_TC_BODY(recvfrom_heap_after_end,tc)7401f155d48SKyle Evans ATF_TC_BODY(recvfrom_heap_after_end, tc)
7411f155d48SKyle Evans {
7421f155d48SKyle Evans #define BUF __stack.__buf
7431f155d48SKyle Evans struct {
7441f155d48SKyle Evans uint8_t padding_l;
7451f155d48SKyle Evans unsigned char * __buf;
7461f155d48SKyle Evans uint8_t padding_r;
7471f155d48SKyle Evans } __stack;
7481f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
7491f155d48SKyle Evans const size_t __len = 42 + 1;
7501f155d48SKyle Evans const size_t __idx __unused = __len - 1;
7511f155d48SKyle Evans pid_t __child;
7521f155d48SKyle Evans int __status;
7531f155d48SKyle Evans int sock[2] = { -1, -1 };
7541f155d48SKyle Evans
7551f155d48SKyle Evans __child = fork();
7561f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
7571f155d48SKyle Evans if (__child > 0)
7581f155d48SKyle Evans goto monitor;
7591f155d48SKyle Evans
7601f155d48SKyle Evans /* Child */
7611f155d48SKyle Evans disable_coredumps();
7621f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
7631f155d48SKyle Evans new_socket(sock);
7641f155d48SKyle Evans
7651f155d48SKyle Evans recvfrom(sock[0], __stack.__buf, __len, 0, NULL, NULL);
7661f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
7671f155d48SKyle Evans
7681f155d48SKyle Evans monitor:
7691f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
7701f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
7711f155d48SKyle Evans }
7721f155d48SKyle Evans
7731f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
7741f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
7751f155d48SKyle Evans case EX_SOFTWARE:
7761f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
7771f155d48SKyle Evans break;
7781f155d48SKyle Evans case EX_OSERR:
7791f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
7801f155d48SKyle Evans break;
7811f155d48SKyle Evans default:
7821f155d48SKyle Evans atf_tc_fail("child exited with status %d",
7831f155d48SKyle Evans WEXITSTATUS(__status));
7841f155d48SKyle Evans }
7851f155d48SKyle Evans } else {
7861f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
7871f155d48SKyle Evans }
7881f155d48SKyle Evans #undef BUF
7891f155d48SKyle Evans
7901f155d48SKyle Evans }
7911f155d48SKyle Evans
79209cdbf04SKyle Evans ATF_TC(recvfrom_sockaddr_before_end);
ATF_TC_HEAD(recvfrom_sockaddr_before_end,tc)79309cdbf04SKyle Evans ATF_TC_HEAD(recvfrom_sockaddr_before_end, tc)
79409cdbf04SKyle Evans {
79509cdbf04SKyle Evans }
ATF_TC_BODY(recvfrom_sockaddr_before_end,tc)7961f155d48SKyle Evans ATF_TC_BODY(recvfrom_sockaddr_before_end, tc)
7971f155d48SKyle Evans {
7981f155d48SKyle Evans #define BUF &__stack.__buf
7991f155d48SKyle Evans struct {
8001f155d48SKyle Evans uint8_t padding_l;
8011f155d48SKyle Evans struct sockaddr __buf;
8021f155d48SKyle Evans uint8_t padding_r;
8031f155d48SKyle Evans } __stack;
8041f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
8051f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) - 1;
8061f155d48SKyle Evans const size_t __idx __unused = __len - 1;
8071f155d48SKyle Evans int sock[2] = { -1, -1 };
8081f155d48SKyle Evans char data[16];
8091f155d48SKyle Evans socklen_t socklen;
8101f155d48SKyle Evans
8111f155d48SKyle Evans new_socket(sock);
8121f155d48SKyle Evans socklen = __len;
8131f155d48SKyle Evans
8141f155d48SKyle Evans recvfrom(sock[0], data, sizeof(data), 0, &__stack.__buf, &socklen);
8151f155d48SKyle Evans #undef BUF
8161f155d48SKyle Evans
8171f155d48SKyle Evans }
8181f155d48SKyle Evans
81909cdbf04SKyle Evans ATF_TC(recvfrom_sockaddr_end);
ATF_TC_HEAD(recvfrom_sockaddr_end,tc)82009cdbf04SKyle Evans ATF_TC_HEAD(recvfrom_sockaddr_end, tc)
82109cdbf04SKyle Evans {
82209cdbf04SKyle Evans }
ATF_TC_BODY(recvfrom_sockaddr_end,tc)8231f155d48SKyle Evans ATF_TC_BODY(recvfrom_sockaddr_end, tc)
8241f155d48SKyle Evans {
8251f155d48SKyle Evans #define BUF &__stack.__buf
8261f155d48SKyle Evans struct {
8271f155d48SKyle Evans uint8_t padding_l;
8281f155d48SKyle Evans struct sockaddr __buf;
8291f155d48SKyle Evans uint8_t padding_r;
8301f155d48SKyle Evans } __stack;
8311f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
8321f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr);
8331f155d48SKyle Evans const size_t __idx __unused = __len - 1;
8341f155d48SKyle Evans int sock[2] = { -1, -1 };
8351f155d48SKyle Evans char data[16];
8361f155d48SKyle Evans socklen_t socklen;
8371f155d48SKyle Evans
8381f155d48SKyle Evans new_socket(sock);
8391f155d48SKyle Evans socklen = __len;
8401f155d48SKyle Evans
8411f155d48SKyle Evans recvfrom(sock[0], data, sizeof(data), 0, &__stack.__buf, &socklen);
8421f155d48SKyle Evans #undef BUF
8431f155d48SKyle Evans
8441f155d48SKyle Evans }
8451f155d48SKyle Evans
84609cdbf04SKyle Evans ATF_TC(recvfrom_sockaddr_heap_before_end);
ATF_TC_HEAD(recvfrom_sockaddr_heap_before_end,tc)84709cdbf04SKyle Evans ATF_TC_HEAD(recvfrom_sockaddr_heap_before_end, tc)
84809cdbf04SKyle Evans {
84909cdbf04SKyle Evans }
ATF_TC_BODY(recvfrom_sockaddr_heap_before_end,tc)8501f155d48SKyle Evans ATF_TC_BODY(recvfrom_sockaddr_heap_before_end, tc)
8511f155d48SKyle Evans {
8521f155d48SKyle Evans #define BUF __stack.__buf
8531f155d48SKyle Evans struct {
8541f155d48SKyle Evans uint8_t padding_l;
8551f155d48SKyle Evans struct sockaddr * __buf;
8561f155d48SKyle Evans uint8_t padding_r;
8571f155d48SKyle Evans } __stack;
8581f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
8591f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) - 1;
8601f155d48SKyle Evans const size_t __idx __unused = __len - 1;
8611f155d48SKyle Evans int sock[2] = { -1, -1 };
8621f155d48SKyle Evans char data[16];
8631f155d48SKyle Evans socklen_t socklen;
8641f155d48SKyle Evans
8651f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
8661f155d48SKyle Evans new_socket(sock);
8671f155d48SKyle Evans socklen = __len;
8681f155d48SKyle Evans
8691f155d48SKyle Evans recvfrom(sock[0], data, sizeof(data), 0, __stack.__buf, &socklen);
8701f155d48SKyle Evans #undef BUF
8711f155d48SKyle Evans
8721f155d48SKyle Evans }
8731f155d48SKyle Evans
87409cdbf04SKyle Evans ATF_TC(recvfrom_sockaddr_heap_end);
ATF_TC_HEAD(recvfrom_sockaddr_heap_end,tc)87509cdbf04SKyle Evans ATF_TC_HEAD(recvfrom_sockaddr_heap_end, tc)
87609cdbf04SKyle Evans {
87709cdbf04SKyle Evans }
ATF_TC_BODY(recvfrom_sockaddr_heap_end,tc)8781f155d48SKyle Evans ATF_TC_BODY(recvfrom_sockaddr_heap_end, tc)
8791f155d48SKyle Evans {
8801f155d48SKyle Evans #define BUF __stack.__buf
8811f155d48SKyle Evans struct {
8821f155d48SKyle Evans uint8_t padding_l;
8831f155d48SKyle Evans struct sockaddr * __buf;
8841f155d48SKyle Evans uint8_t padding_r;
8851f155d48SKyle Evans } __stack;
8861f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
8871f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr);
8881f155d48SKyle Evans const size_t __idx __unused = __len - 1;
8891f155d48SKyle Evans int sock[2] = { -1, -1 };
8901f155d48SKyle Evans char data[16];
8911f155d48SKyle Evans socklen_t socklen;
8921f155d48SKyle Evans
8931f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
8941f155d48SKyle Evans new_socket(sock);
8951f155d48SKyle Evans socklen = __len;
8961f155d48SKyle Evans
8971f155d48SKyle Evans recvfrom(sock[0], data, sizeof(data), 0, __stack.__buf, &socklen);
8981f155d48SKyle Evans #undef BUF
8991f155d48SKyle Evans
9001f155d48SKyle Evans }
9011f155d48SKyle Evans
90209cdbf04SKyle Evans ATF_TC(recvfrom_sockaddr_heap_after_end);
ATF_TC_HEAD(recvfrom_sockaddr_heap_after_end,tc)90309cdbf04SKyle Evans ATF_TC_HEAD(recvfrom_sockaddr_heap_after_end, tc)
90409cdbf04SKyle Evans {
90509cdbf04SKyle Evans }
ATF_TC_BODY(recvfrom_sockaddr_heap_after_end,tc)9061f155d48SKyle Evans ATF_TC_BODY(recvfrom_sockaddr_heap_after_end, tc)
9071f155d48SKyle Evans {
9081f155d48SKyle Evans #define BUF __stack.__buf
9091f155d48SKyle Evans struct {
9101f155d48SKyle Evans uint8_t padding_l;
9111f155d48SKyle Evans struct sockaddr * __buf;
9121f155d48SKyle Evans uint8_t padding_r;
9131f155d48SKyle Evans } __stack;
9141f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
9151f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) + 1;
9161f155d48SKyle Evans const size_t __idx __unused = __len - 1;
9171f155d48SKyle Evans pid_t __child;
9181f155d48SKyle Evans int __status;
9191f155d48SKyle Evans int sock[2] = { -1, -1 };
9201f155d48SKyle Evans char data[16];
9211f155d48SKyle Evans socklen_t socklen;
9221f155d48SKyle Evans
9231f155d48SKyle Evans __child = fork();
9241f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
9251f155d48SKyle Evans if (__child > 0)
9261f155d48SKyle Evans goto monitor;
9271f155d48SKyle Evans
9281f155d48SKyle Evans /* Child */
9291f155d48SKyle Evans disable_coredumps();
9301f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
9311f155d48SKyle Evans new_socket(sock);
9321f155d48SKyle Evans socklen = __len;
9331f155d48SKyle Evans
9341f155d48SKyle Evans recvfrom(sock[0], data, sizeof(data), 0, __stack.__buf, &socklen);
9351f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
9361f155d48SKyle Evans
9371f155d48SKyle Evans monitor:
9381f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
9391f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
9401f155d48SKyle Evans }
9411f155d48SKyle Evans
9421f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
9431f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
9441f155d48SKyle Evans case EX_SOFTWARE:
9451f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
9461f155d48SKyle Evans break;
9471f155d48SKyle Evans case EX_OSERR:
9481f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
9491f155d48SKyle Evans break;
9501f155d48SKyle Evans default:
9511f155d48SKyle Evans atf_tc_fail("child exited with status %d",
9521f155d48SKyle Evans WEXITSTATUS(__status));
9531f155d48SKyle Evans }
9541f155d48SKyle Evans } else {
9551f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
9561f155d48SKyle Evans }
9571f155d48SKyle Evans #undef BUF
9581f155d48SKyle Evans
9591f155d48SKyle Evans }
9601f155d48SKyle Evans
96109cdbf04SKyle Evans ATF_TC(recvmsg_msg_name_before_end);
ATF_TC_HEAD(recvmsg_msg_name_before_end,tc)96209cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_name_before_end, tc)
96309cdbf04SKyle Evans {
96409cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_name_before_end,tc)9651f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_name_before_end, tc)
9661f155d48SKyle Evans {
9671f155d48SKyle Evans #define BUF &__stack.__buf
9681f155d48SKyle Evans struct {
9691f155d48SKyle Evans uint8_t padding_l;
9701f155d48SKyle Evans struct sockaddr __buf;
9711f155d48SKyle Evans uint8_t padding_r;
9721f155d48SKyle Evans } __stack;
9731f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
9741f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) - 1;
9751f155d48SKyle Evans const size_t __idx __unused = __len - 1;
9761f155d48SKyle Evans int sock[2] = { -1, -1 };
9771f155d48SKyle Evans struct msghdr msg;
9781f155d48SKyle Evans
9791f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
9801f155d48SKyle Evans msg.msg_name = BUF;
9811f155d48SKyle Evans msg.msg_namelen = __len;
9821f155d48SKyle Evans
9831f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
9841f155d48SKyle Evans #undef BUF
9851f155d48SKyle Evans
9861f155d48SKyle Evans }
9871f155d48SKyle Evans
98809cdbf04SKyle Evans ATF_TC(recvmsg_msg_name_end);
ATF_TC_HEAD(recvmsg_msg_name_end,tc)98909cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_name_end, tc)
99009cdbf04SKyle Evans {
99109cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_name_end,tc)9921f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_name_end, tc)
9931f155d48SKyle Evans {
9941f155d48SKyle Evans #define BUF &__stack.__buf
9951f155d48SKyle Evans struct {
9961f155d48SKyle Evans uint8_t padding_l;
9971f155d48SKyle Evans struct sockaddr __buf;
9981f155d48SKyle Evans uint8_t padding_r;
9991f155d48SKyle Evans } __stack;
10001f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
10011f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr);
10021f155d48SKyle Evans const size_t __idx __unused = __len - 1;
10031f155d48SKyle Evans int sock[2] = { -1, -1 };
10041f155d48SKyle Evans struct msghdr msg;
10051f155d48SKyle Evans
10061f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
10071f155d48SKyle Evans msg.msg_name = BUF;
10081f155d48SKyle Evans msg.msg_namelen = __len;
10091f155d48SKyle Evans
10101f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
10111f155d48SKyle Evans #undef BUF
10121f155d48SKyle Evans
10131f155d48SKyle Evans }
10141f155d48SKyle Evans
101509cdbf04SKyle Evans ATF_TC(recvmsg_msg_name_heap_before_end);
ATF_TC_HEAD(recvmsg_msg_name_heap_before_end,tc)101609cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_name_heap_before_end, tc)
101709cdbf04SKyle Evans {
101809cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_name_heap_before_end,tc)10191f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_name_heap_before_end, tc)
10201f155d48SKyle Evans {
10211f155d48SKyle Evans #define BUF __stack.__buf
10221f155d48SKyle Evans struct {
10231f155d48SKyle Evans uint8_t padding_l;
10241f155d48SKyle Evans struct sockaddr * __buf;
10251f155d48SKyle Evans uint8_t padding_r;
10261f155d48SKyle Evans } __stack;
10271f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
10281f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) - 1;
10291f155d48SKyle Evans const size_t __idx __unused = __len - 1;
10301f155d48SKyle Evans int sock[2] = { -1, -1 };
10311f155d48SKyle Evans struct msghdr msg;
10321f155d48SKyle Evans
10331f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
10341f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
10351f155d48SKyle Evans msg.msg_name = BUF;
10361f155d48SKyle Evans msg.msg_namelen = __len;
10371f155d48SKyle Evans
10381f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
10391f155d48SKyle Evans #undef BUF
10401f155d48SKyle Evans
10411f155d48SKyle Evans }
10421f155d48SKyle Evans
104309cdbf04SKyle Evans ATF_TC(recvmsg_msg_name_heap_end);
ATF_TC_HEAD(recvmsg_msg_name_heap_end,tc)104409cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_name_heap_end, tc)
104509cdbf04SKyle Evans {
104609cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_name_heap_end,tc)10471f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_name_heap_end, tc)
10481f155d48SKyle Evans {
10491f155d48SKyle Evans #define BUF __stack.__buf
10501f155d48SKyle Evans struct {
10511f155d48SKyle Evans uint8_t padding_l;
10521f155d48SKyle Evans struct sockaddr * __buf;
10531f155d48SKyle Evans uint8_t padding_r;
10541f155d48SKyle Evans } __stack;
10551f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
10561f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr);
10571f155d48SKyle Evans const size_t __idx __unused = __len - 1;
10581f155d48SKyle Evans int sock[2] = { -1, -1 };
10591f155d48SKyle Evans struct msghdr msg;
10601f155d48SKyle Evans
10611f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
10621f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
10631f155d48SKyle Evans msg.msg_name = BUF;
10641f155d48SKyle Evans msg.msg_namelen = __len;
10651f155d48SKyle Evans
10661f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
10671f155d48SKyle Evans #undef BUF
10681f155d48SKyle Evans
10691f155d48SKyle Evans }
10701f155d48SKyle Evans
107109cdbf04SKyle Evans ATF_TC(recvmsg_msg_name_heap_after_end);
ATF_TC_HEAD(recvmsg_msg_name_heap_after_end,tc)107209cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_name_heap_after_end, tc)
107309cdbf04SKyle Evans {
107409cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_name_heap_after_end,tc)10751f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_name_heap_after_end, tc)
10761f155d48SKyle Evans {
10771f155d48SKyle Evans #define BUF __stack.__buf
10781f155d48SKyle Evans struct {
10791f155d48SKyle Evans uint8_t padding_l;
10801f155d48SKyle Evans struct sockaddr * __buf;
10811f155d48SKyle Evans uint8_t padding_r;
10821f155d48SKyle Evans } __stack;
10831f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (1);
10841f155d48SKyle Evans const size_t __len = sizeof(struct sockaddr) + 1;
10851f155d48SKyle Evans const size_t __idx __unused = __len - 1;
10861f155d48SKyle Evans pid_t __child;
10871f155d48SKyle Evans int __status;
10881f155d48SKyle Evans int sock[2] = { -1, -1 };
10891f155d48SKyle Evans struct msghdr msg;
10901f155d48SKyle Evans
10911f155d48SKyle Evans __child = fork();
10921f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
10931f155d48SKyle Evans if (__child > 0)
10941f155d48SKyle Evans goto monitor;
10951f155d48SKyle Evans
10961f155d48SKyle Evans /* Child */
10971f155d48SKyle Evans disable_coredumps();
10981f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
10991f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
11001f155d48SKyle Evans msg.msg_name = BUF;
11011f155d48SKyle Evans msg.msg_namelen = __len;
11021f155d48SKyle Evans
11031f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
11041f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
11051f155d48SKyle Evans
11061f155d48SKyle Evans monitor:
11071f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
11081f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
11091f155d48SKyle Evans }
11101f155d48SKyle Evans
11111f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
11121f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
11131f155d48SKyle Evans case EX_SOFTWARE:
11141f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
11151f155d48SKyle Evans break;
11161f155d48SKyle Evans case EX_OSERR:
11171f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
11181f155d48SKyle Evans break;
11191f155d48SKyle Evans default:
11201f155d48SKyle Evans atf_tc_fail("child exited with status %d",
11211f155d48SKyle Evans WEXITSTATUS(__status));
11221f155d48SKyle Evans }
11231f155d48SKyle Evans } else {
11241f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
11251f155d48SKyle Evans }
11261f155d48SKyle Evans #undef BUF
11271f155d48SKyle Evans
11281f155d48SKyle Evans }
11291f155d48SKyle Evans
113009cdbf04SKyle Evans ATF_TC(recvmsg_msg_iov_before_end);
ATF_TC_HEAD(recvmsg_msg_iov_before_end,tc)113109cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_iov_before_end, tc)
113209cdbf04SKyle Evans {
113309cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_iov_before_end,tc)11341f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_iov_before_end, tc)
11351f155d48SKyle Evans {
11361f155d48SKyle Evans #define BUF &__stack.__buf
11371f155d48SKyle Evans struct {
11381f155d48SKyle Evans uint8_t padding_l;
11391f155d48SKyle Evans unsigned char __buf[42];
11401f155d48SKyle Evans uint8_t padding_r;
11411f155d48SKyle Evans } __stack;
11421f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
11431f155d48SKyle Evans const size_t __len = 42 - 1;
11441f155d48SKyle Evans const size_t __idx __unused = __len - 1;
11451f155d48SKyle Evans int sock[2] = { -1, -1 };
11461f155d48SKyle Evans struct msghdr msg;
11471f155d48SKyle Evans struct iovec iov[2];
11481f155d48SKyle Evans
11491f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
11501f155d48SKyle Evans memset(&iov[0], 0, sizeof(iov));
11511f155d48SKyle Evans
11521f155d48SKyle Evans /*
11531f155d48SKyle Evans * We position the buffer second just so that we can confirm that the
11541f155d48SKyle Evans * fortification bits are traversing the iovec correctly.
11551f155d48SKyle Evans */
11561f155d48SKyle Evans iov[1].iov_base = BUF;
11571f155d48SKyle Evans iov[1].iov_len = __len;
11581f155d48SKyle Evans
11591f155d48SKyle Evans msg.msg_iov = &iov[0];
11601f155d48SKyle Evans msg.msg_iovlen = nitems(iov);
11611f155d48SKyle Evans
11621f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
11631f155d48SKyle Evans #undef BUF
11641f155d48SKyle Evans
11651f155d48SKyle Evans }
11661f155d48SKyle Evans
116709cdbf04SKyle Evans ATF_TC(recvmsg_msg_iov_end);
ATF_TC_HEAD(recvmsg_msg_iov_end,tc)116809cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_iov_end, tc)
116909cdbf04SKyle Evans {
117009cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_iov_end,tc)11711f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_iov_end, tc)
11721f155d48SKyle Evans {
11731f155d48SKyle Evans #define BUF &__stack.__buf
11741f155d48SKyle Evans struct {
11751f155d48SKyle Evans uint8_t padding_l;
11761f155d48SKyle Evans unsigned char __buf[42];
11771f155d48SKyle Evans uint8_t padding_r;
11781f155d48SKyle Evans } __stack;
11791f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
11801f155d48SKyle Evans const size_t __len = 42;
11811f155d48SKyle Evans const size_t __idx __unused = __len - 1;
11821f155d48SKyle Evans int sock[2] = { -1, -1 };
11831f155d48SKyle Evans struct msghdr msg;
11841f155d48SKyle Evans struct iovec iov[2];
11851f155d48SKyle Evans
11861f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
11871f155d48SKyle Evans memset(&iov[0], 0, sizeof(iov));
11881f155d48SKyle Evans
11891f155d48SKyle Evans /*
11901f155d48SKyle Evans * We position the buffer second just so that we can confirm that the
11911f155d48SKyle Evans * fortification bits are traversing the iovec correctly.
11921f155d48SKyle Evans */
11931f155d48SKyle Evans iov[1].iov_base = BUF;
11941f155d48SKyle Evans iov[1].iov_len = __len;
11951f155d48SKyle Evans
11961f155d48SKyle Evans msg.msg_iov = &iov[0];
11971f155d48SKyle Evans msg.msg_iovlen = nitems(iov);
11981f155d48SKyle Evans
11991f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
12001f155d48SKyle Evans #undef BUF
12011f155d48SKyle Evans
12021f155d48SKyle Evans }
12031f155d48SKyle Evans
120409cdbf04SKyle Evans ATF_TC(recvmsg_msg_iov_heap_before_end);
ATF_TC_HEAD(recvmsg_msg_iov_heap_before_end,tc)120509cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_iov_heap_before_end, tc)
120609cdbf04SKyle Evans {
120709cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_iov_heap_before_end,tc)12081f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_iov_heap_before_end, tc)
12091f155d48SKyle Evans {
12101f155d48SKyle Evans #define BUF __stack.__buf
12111f155d48SKyle Evans struct {
12121f155d48SKyle Evans uint8_t padding_l;
12131f155d48SKyle Evans unsigned char * __buf;
12141f155d48SKyle Evans uint8_t padding_r;
12151f155d48SKyle Evans } __stack;
12161f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
12171f155d48SKyle Evans const size_t __len = 42 - 1;
12181f155d48SKyle Evans const size_t __idx __unused = __len - 1;
12191f155d48SKyle Evans int sock[2] = { -1, -1 };
12201f155d48SKyle Evans struct msghdr msg;
12211f155d48SKyle Evans struct iovec iov[2];
12221f155d48SKyle Evans
12231f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
12241f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
12251f155d48SKyle Evans memset(&iov[0], 0, sizeof(iov));
12261f155d48SKyle Evans
12271f155d48SKyle Evans /*
12281f155d48SKyle Evans * We position the buffer second just so that we can confirm that the
12291f155d48SKyle Evans * fortification bits are traversing the iovec correctly.
12301f155d48SKyle Evans */
12311f155d48SKyle Evans iov[1].iov_base = BUF;
12321f155d48SKyle Evans iov[1].iov_len = __len;
12331f155d48SKyle Evans
12341f155d48SKyle Evans msg.msg_iov = &iov[0];
12351f155d48SKyle Evans msg.msg_iovlen = nitems(iov);
12361f155d48SKyle Evans
12371f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
12381f155d48SKyle Evans #undef BUF
12391f155d48SKyle Evans
12401f155d48SKyle Evans }
12411f155d48SKyle Evans
124209cdbf04SKyle Evans ATF_TC(recvmsg_msg_iov_heap_end);
ATF_TC_HEAD(recvmsg_msg_iov_heap_end,tc)124309cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_iov_heap_end, tc)
124409cdbf04SKyle Evans {
124509cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_iov_heap_end,tc)12461f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_iov_heap_end, tc)
12471f155d48SKyle Evans {
12481f155d48SKyle Evans #define BUF __stack.__buf
12491f155d48SKyle Evans struct {
12501f155d48SKyle Evans uint8_t padding_l;
12511f155d48SKyle Evans unsigned char * __buf;
12521f155d48SKyle Evans uint8_t padding_r;
12531f155d48SKyle Evans } __stack;
12541f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
12551f155d48SKyle Evans const size_t __len = 42;
12561f155d48SKyle Evans const size_t __idx __unused = __len - 1;
12571f155d48SKyle Evans int sock[2] = { -1, -1 };
12581f155d48SKyle Evans struct msghdr msg;
12591f155d48SKyle Evans struct iovec iov[2];
12601f155d48SKyle Evans
12611f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
12621f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
12631f155d48SKyle Evans memset(&iov[0], 0, sizeof(iov));
12641f155d48SKyle Evans
12651f155d48SKyle Evans /*
12661f155d48SKyle Evans * We position the buffer second just so that we can confirm that the
12671f155d48SKyle Evans * fortification bits are traversing the iovec correctly.
12681f155d48SKyle Evans */
12691f155d48SKyle Evans iov[1].iov_base = BUF;
12701f155d48SKyle Evans iov[1].iov_len = __len;
12711f155d48SKyle Evans
12721f155d48SKyle Evans msg.msg_iov = &iov[0];
12731f155d48SKyle Evans msg.msg_iovlen = nitems(iov);
12741f155d48SKyle Evans
12751f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
12761f155d48SKyle Evans #undef BUF
12771f155d48SKyle Evans
12781f155d48SKyle Evans }
12791f155d48SKyle Evans
128009cdbf04SKyle Evans ATF_TC(recvmsg_msg_iov_heap_after_end);
ATF_TC_HEAD(recvmsg_msg_iov_heap_after_end,tc)128109cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_iov_heap_after_end, tc)
128209cdbf04SKyle Evans {
128309cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_iov_heap_after_end,tc)12841f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_iov_heap_after_end, tc)
12851f155d48SKyle Evans {
12861f155d48SKyle Evans #define BUF __stack.__buf
12871f155d48SKyle Evans struct {
12881f155d48SKyle Evans uint8_t padding_l;
12891f155d48SKyle Evans unsigned char * __buf;
12901f155d48SKyle Evans uint8_t padding_r;
12911f155d48SKyle Evans } __stack;
12921f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
12931f155d48SKyle Evans const size_t __len = 42 + 1;
12941f155d48SKyle Evans const size_t __idx __unused = __len - 1;
12951f155d48SKyle Evans pid_t __child;
12961f155d48SKyle Evans int __status;
12971f155d48SKyle Evans int sock[2] = { -1, -1 };
12981f155d48SKyle Evans struct msghdr msg;
12991f155d48SKyle Evans struct iovec iov[2];
13001f155d48SKyle Evans
13011f155d48SKyle Evans __child = fork();
13021f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
13031f155d48SKyle Evans if (__child > 0)
13041f155d48SKyle Evans goto monitor;
13051f155d48SKyle Evans
13061f155d48SKyle Evans /* Child */
13071f155d48SKyle Evans disable_coredumps();
13081f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
13091f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
13101f155d48SKyle Evans memset(&iov[0], 0, sizeof(iov));
13111f155d48SKyle Evans
13121f155d48SKyle Evans /*
13131f155d48SKyle Evans * We position the buffer second just so that we can confirm that the
13141f155d48SKyle Evans * fortification bits are traversing the iovec correctly.
13151f155d48SKyle Evans */
13161f155d48SKyle Evans iov[1].iov_base = BUF;
13171f155d48SKyle Evans iov[1].iov_len = __len;
13181f155d48SKyle Evans
13191f155d48SKyle Evans msg.msg_iov = &iov[0];
13201f155d48SKyle Evans msg.msg_iovlen = nitems(iov);
13211f155d48SKyle Evans
13221f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
13231f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
13241f155d48SKyle Evans
13251f155d48SKyle Evans monitor:
13261f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
13271f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
13281f155d48SKyle Evans }
13291f155d48SKyle Evans
13301f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
13311f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
13321f155d48SKyle Evans case EX_SOFTWARE:
13331f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
13341f155d48SKyle Evans break;
13351f155d48SKyle Evans case EX_OSERR:
13361f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
13371f155d48SKyle Evans break;
13381f155d48SKyle Evans default:
13391f155d48SKyle Evans atf_tc_fail("child exited with status %d",
13401f155d48SKyle Evans WEXITSTATUS(__status));
13411f155d48SKyle Evans }
13421f155d48SKyle Evans } else {
13431f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
13441f155d48SKyle Evans }
13451f155d48SKyle Evans #undef BUF
13461f155d48SKyle Evans
13471f155d48SKyle Evans }
13481f155d48SKyle Evans
134909cdbf04SKyle Evans ATF_TC(recvmsg_msg_control_before_end);
ATF_TC_HEAD(recvmsg_msg_control_before_end,tc)135009cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_control_before_end, tc)
135109cdbf04SKyle Evans {
135209cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_control_before_end,tc)13531f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_control_before_end, tc)
13541f155d48SKyle Evans {
13551f155d48SKyle Evans #define BUF &__stack.__buf
13561f155d48SKyle Evans struct {
13571f155d48SKyle Evans uint8_t padding_l;
13581f155d48SKyle Evans unsigned char __buf[CMSG_SPACE(sizeof(int))];
13591f155d48SKyle Evans uint8_t padding_r;
13601f155d48SKyle Evans } __stack;
13611f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
13621f155d48SKyle Evans const size_t __len = CMSG_SPACE(sizeof(int)) - 1;
13631f155d48SKyle Evans const size_t __idx __unused = __len - 1;
13641f155d48SKyle Evans int sock[2] = { -1, -1 };
13651f155d48SKyle Evans struct msghdr msg;
13661f155d48SKyle Evans
13671f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
13681f155d48SKyle Evans
13691f155d48SKyle Evans msg.msg_control = BUF;
13701f155d48SKyle Evans msg.msg_controllen = __len;
13711f155d48SKyle Evans
13721f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
13731f155d48SKyle Evans #undef BUF
13741f155d48SKyle Evans
13751f155d48SKyle Evans }
13761f155d48SKyle Evans
137709cdbf04SKyle Evans ATF_TC(recvmsg_msg_control_end);
ATF_TC_HEAD(recvmsg_msg_control_end,tc)137809cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_control_end, tc)
137909cdbf04SKyle Evans {
138009cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_control_end,tc)13811f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_control_end, tc)
13821f155d48SKyle Evans {
13831f155d48SKyle Evans #define BUF &__stack.__buf
13841f155d48SKyle Evans struct {
13851f155d48SKyle Evans uint8_t padding_l;
13861f155d48SKyle Evans unsigned char __buf[CMSG_SPACE(sizeof(int))];
13871f155d48SKyle Evans uint8_t padding_r;
13881f155d48SKyle Evans } __stack;
13891f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
13901f155d48SKyle Evans const size_t __len = CMSG_SPACE(sizeof(int));
13911f155d48SKyle Evans const size_t __idx __unused = __len - 1;
13921f155d48SKyle Evans int sock[2] = { -1, -1 };
13931f155d48SKyle Evans struct msghdr msg;
13941f155d48SKyle Evans
13951f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
13961f155d48SKyle Evans
13971f155d48SKyle Evans msg.msg_control = BUF;
13981f155d48SKyle Evans msg.msg_controllen = __len;
13991f155d48SKyle Evans
14001f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
14011f155d48SKyle Evans #undef BUF
14021f155d48SKyle Evans
14031f155d48SKyle Evans }
14041f155d48SKyle Evans
140509cdbf04SKyle Evans ATF_TC(recvmsg_msg_control_heap_before_end);
ATF_TC_HEAD(recvmsg_msg_control_heap_before_end,tc)140609cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_control_heap_before_end, tc)
140709cdbf04SKyle Evans {
140809cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_control_heap_before_end,tc)14091f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_control_heap_before_end, tc)
14101f155d48SKyle Evans {
14111f155d48SKyle Evans #define BUF __stack.__buf
14121f155d48SKyle Evans struct {
14131f155d48SKyle Evans uint8_t padding_l;
14141f155d48SKyle Evans unsigned char * __buf;
14151f155d48SKyle Evans uint8_t padding_r;
14161f155d48SKyle Evans } __stack;
14171f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (CMSG_SPACE(sizeof(int)));
14181f155d48SKyle Evans const size_t __len = CMSG_SPACE(sizeof(int)) - 1;
14191f155d48SKyle Evans const size_t __idx __unused = __len - 1;
14201f155d48SKyle Evans int sock[2] = { -1, -1 };
14211f155d48SKyle Evans struct msghdr msg;
14221f155d48SKyle Evans
14231f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
14241f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
14251f155d48SKyle Evans
14261f155d48SKyle Evans msg.msg_control = BUF;
14271f155d48SKyle Evans msg.msg_controllen = __len;
14281f155d48SKyle Evans
14291f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
14301f155d48SKyle Evans #undef BUF
14311f155d48SKyle Evans
14321f155d48SKyle Evans }
14331f155d48SKyle Evans
143409cdbf04SKyle Evans ATF_TC(recvmsg_msg_control_heap_end);
ATF_TC_HEAD(recvmsg_msg_control_heap_end,tc)143509cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_control_heap_end, tc)
143609cdbf04SKyle Evans {
143709cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_control_heap_end,tc)14381f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_control_heap_end, tc)
14391f155d48SKyle Evans {
14401f155d48SKyle Evans #define BUF __stack.__buf
14411f155d48SKyle Evans struct {
14421f155d48SKyle Evans uint8_t padding_l;
14431f155d48SKyle Evans unsigned char * __buf;
14441f155d48SKyle Evans uint8_t padding_r;
14451f155d48SKyle Evans } __stack;
14461f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (CMSG_SPACE(sizeof(int)));
14471f155d48SKyle Evans const size_t __len = CMSG_SPACE(sizeof(int));
14481f155d48SKyle Evans const size_t __idx __unused = __len - 1;
14491f155d48SKyle Evans int sock[2] = { -1, -1 };
14501f155d48SKyle Evans struct msghdr msg;
14511f155d48SKyle Evans
14521f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
14531f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
14541f155d48SKyle Evans
14551f155d48SKyle Evans msg.msg_control = BUF;
14561f155d48SKyle Evans msg.msg_controllen = __len;
14571f155d48SKyle Evans
14581f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
14591f155d48SKyle Evans #undef BUF
14601f155d48SKyle Evans
14611f155d48SKyle Evans }
14621f155d48SKyle Evans
146309cdbf04SKyle Evans ATF_TC(recvmsg_msg_control_heap_after_end);
ATF_TC_HEAD(recvmsg_msg_control_heap_after_end,tc)146409cdbf04SKyle Evans ATF_TC_HEAD(recvmsg_msg_control_heap_after_end, tc)
146509cdbf04SKyle Evans {
146609cdbf04SKyle Evans }
ATF_TC_BODY(recvmsg_msg_control_heap_after_end,tc)14671f155d48SKyle Evans ATF_TC_BODY(recvmsg_msg_control_heap_after_end, tc)
14681f155d48SKyle Evans {
14691f155d48SKyle Evans #define BUF __stack.__buf
14701f155d48SKyle Evans struct {
14711f155d48SKyle Evans uint8_t padding_l;
14721f155d48SKyle Evans unsigned char * __buf;
14731f155d48SKyle Evans uint8_t padding_r;
14741f155d48SKyle Evans } __stack;
14751f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (CMSG_SPACE(sizeof(int)));
14761f155d48SKyle Evans const size_t __len = CMSG_SPACE(sizeof(int)) + 1;
14771f155d48SKyle Evans const size_t __idx __unused = __len - 1;
14781f155d48SKyle Evans pid_t __child;
14791f155d48SKyle Evans int __status;
14801f155d48SKyle Evans int sock[2] = { -1, -1 };
14811f155d48SKyle Evans struct msghdr msg;
14821f155d48SKyle Evans
14831f155d48SKyle Evans __child = fork();
14841f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
14851f155d48SKyle Evans if (__child > 0)
14861f155d48SKyle Evans goto monitor;
14871f155d48SKyle Evans
14881f155d48SKyle Evans /* Child */
14891f155d48SKyle Evans disable_coredumps();
14901f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
14911f155d48SKyle Evans memset(&msg, 0, sizeof(msg));
14921f155d48SKyle Evans
14931f155d48SKyle Evans msg.msg_control = BUF;
14941f155d48SKyle Evans msg.msg_controllen = __len;
14951f155d48SKyle Evans
14961f155d48SKyle Evans recvmsg(sock[0], &msg, 0);
14971f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
14981f155d48SKyle Evans
14991f155d48SKyle Evans monitor:
15001f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
15011f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
15021f155d48SKyle Evans }
15031f155d48SKyle Evans
15041f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
15051f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
15061f155d48SKyle Evans case EX_SOFTWARE:
15071f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
15081f155d48SKyle Evans break;
15091f155d48SKyle Evans case EX_OSERR:
15101f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
15111f155d48SKyle Evans break;
15121f155d48SKyle Evans default:
15131f155d48SKyle Evans atf_tc_fail("child exited with status %d",
15141f155d48SKyle Evans WEXITSTATUS(__status));
15151f155d48SKyle Evans }
15161f155d48SKyle Evans } else {
15171f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
15181f155d48SKyle Evans }
15191f155d48SKyle Evans #undef BUF
15201f155d48SKyle Evans
15211f155d48SKyle Evans }
15221f155d48SKyle Evans
152309cdbf04SKyle Evans ATF_TC(recvmmsg_msgvec_before_end);
ATF_TC_HEAD(recvmmsg_msgvec_before_end,tc)152409cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msgvec_before_end, tc)
152509cdbf04SKyle Evans {
152609cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msgvec_before_end,tc)15271f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msgvec_before_end, tc)
15281f155d48SKyle Evans {
15291f155d48SKyle Evans #define BUF &__stack.__buf
15301f155d48SKyle Evans struct {
15311f155d48SKyle Evans uint8_t padding_l;
15321f155d48SKyle Evans struct mmsghdr __buf[2];
15331f155d48SKyle Evans uint8_t padding_r;
15341f155d48SKyle Evans } __stack;
15351f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
15361f155d48SKyle Evans const size_t __len = 2 - 1;
15371f155d48SKyle Evans const size_t __idx __unused = __len - 1;
15381f155d48SKyle Evans int sock[2] = { -1, -1 };
15391f155d48SKyle Evans
15401f155d48SKyle Evans recvmmsg(sock[0], __stack.__buf, __len, 0, NULL);
15411f155d48SKyle Evans #undef BUF
15421f155d48SKyle Evans
15431f155d48SKyle Evans }
15441f155d48SKyle Evans
154509cdbf04SKyle Evans ATF_TC(recvmmsg_msgvec_end);
ATF_TC_HEAD(recvmmsg_msgvec_end,tc)154609cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msgvec_end, tc)
154709cdbf04SKyle Evans {
154809cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msgvec_end,tc)15491f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msgvec_end, tc)
15501f155d48SKyle Evans {
15511f155d48SKyle Evans #define BUF &__stack.__buf
15521f155d48SKyle Evans struct {
15531f155d48SKyle Evans uint8_t padding_l;
15541f155d48SKyle Evans struct mmsghdr __buf[2];
15551f155d48SKyle Evans uint8_t padding_r;
15561f155d48SKyle Evans } __stack;
15571f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
15581f155d48SKyle Evans const size_t __len = 2;
15591f155d48SKyle Evans const size_t __idx __unused = __len - 1;
15601f155d48SKyle Evans int sock[2] = { -1, -1 };
15611f155d48SKyle Evans
15621f155d48SKyle Evans recvmmsg(sock[0], __stack.__buf, __len, 0, NULL);
15631f155d48SKyle Evans #undef BUF
15641f155d48SKyle Evans
15651f155d48SKyle Evans }
15661f155d48SKyle Evans
156709cdbf04SKyle Evans ATF_TC(recvmmsg_msgvec_after_end);
ATF_TC_HEAD(recvmmsg_msgvec_after_end,tc)156809cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msgvec_after_end, tc)
156909cdbf04SKyle Evans {
157009cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msgvec_after_end,tc)15711f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msgvec_after_end, tc)
15721f155d48SKyle Evans {
15731f155d48SKyle Evans #define BUF &__stack.__buf
15741f155d48SKyle Evans struct {
15751f155d48SKyle Evans uint8_t padding_l;
15761f155d48SKyle Evans struct mmsghdr __buf[2];
15771f155d48SKyle Evans uint8_t padding_r;
15781f155d48SKyle Evans } __stack;
15791f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
15801f155d48SKyle Evans const size_t __len = 2 + 1;
15811f155d48SKyle Evans const size_t __idx __unused = __len - 1;
15821f155d48SKyle Evans pid_t __child;
15831f155d48SKyle Evans int __status;
15841f155d48SKyle Evans int sock[2] = { -1, -1 };
15851f155d48SKyle Evans
15861f155d48SKyle Evans __child = fork();
15871f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
15881f155d48SKyle Evans if (__child > 0)
15891f155d48SKyle Evans goto monitor;
15901f155d48SKyle Evans
15911f155d48SKyle Evans /* Child */
15921f155d48SKyle Evans disable_coredumps();
15931f155d48SKyle Evans recvmmsg(sock[0], __stack.__buf, __len, 0, NULL);
15941f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
15951f155d48SKyle Evans
15961f155d48SKyle Evans monitor:
15971f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
15981f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
15991f155d48SKyle Evans }
16001f155d48SKyle Evans
16011f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
16021f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
16031f155d48SKyle Evans case EX_SOFTWARE:
16041f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
16051f155d48SKyle Evans break;
16061f155d48SKyle Evans case EX_OSERR:
16071f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
16081f155d48SKyle Evans break;
16091f155d48SKyle Evans default:
16101f155d48SKyle Evans atf_tc_fail("child exited with status %d",
16111f155d48SKyle Evans WEXITSTATUS(__status));
16121f155d48SKyle Evans }
16131f155d48SKyle Evans } else {
16141f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
16151f155d48SKyle Evans }
16161f155d48SKyle Evans #undef BUF
16171f155d48SKyle Evans
16181f155d48SKyle Evans }
16191f155d48SKyle Evans
162009cdbf04SKyle Evans ATF_TC(recvmmsg_msgvec_heap_before_end);
ATF_TC_HEAD(recvmmsg_msgvec_heap_before_end,tc)162109cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msgvec_heap_before_end, tc)
162209cdbf04SKyle Evans {
162309cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msgvec_heap_before_end,tc)16241f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msgvec_heap_before_end, tc)
16251f155d48SKyle Evans {
16261f155d48SKyle Evans #define BUF __stack.__buf
16271f155d48SKyle Evans struct {
16281f155d48SKyle Evans uint8_t padding_l;
16291f155d48SKyle Evans struct mmsghdr * __buf;
16301f155d48SKyle Evans uint8_t padding_r;
16311f155d48SKyle Evans } __stack;
16321f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (2);
16331f155d48SKyle Evans const size_t __len = 2 - 1;
16341f155d48SKyle Evans const size_t __idx __unused = __len - 1;
16351f155d48SKyle Evans int sock[2] = { -1, -1 };
16361f155d48SKyle Evans
16371f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
16381f155d48SKyle Evans
16391f155d48SKyle Evans recvmmsg(sock[0], __stack.__buf, __len, 0, NULL);
16401f155d48SKyle Evans #undef BUF
16411f155d48SKyle Evans
16421f155d48SKyle Evans }
16431f155d48SKyle Evans
164409cdbf04SKyle Evans ATF_TC(recvmmsg_msgvec_heap_end);
ATF_TC_HEAD(recvmmsg_msgvec_heap_end,tc)164509cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msgvec_heap_end, tc)
164609cdbf04SKyle Evans {
164709cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msgvec_heap_end,tc)16481f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msgvec_heap_end, tc)
16491f155d48SKyle Evans {
16501f155d48SKyle Evans #define BUF __stack.__buf
16511f155d48SKyle Evans struct {
16521f155d48SKyle Evans uint8_t padding_l;
16531f155d48SKyle Evans struct mmsghdr * __buf;
16541f155d48SKyle Evans uint8_t padding_r;
16551f155d48SKyle Evans } __stack;
16561f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (2);
16571f155d48SKyle Evans const size_t __len = 2;
16581f155d48SKyle Evans const size_t __idx __unused = __len - 1;
16591f155d48SKyle Evans int sock[2] = { -1, -1 };
16601f155d48SKyle Evans
16611f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
16621f155d48SKyle Evans
16631f155d48SKyle Evans recvmmsg(sock[0], __stack.__buf, __len, 0, NULL);
16641f155d48SKyle Evans #undef BUF
16651f155d48SKyle Evans
16661f155d48SKyle Evans }
16671f155d48SKyle Evans
166809cdbf04SKyle Evans ATF_TC(recvmmsg_msgvec_heap_after_end);
ATF_TC_HEAD(recvmmsg_msgvec_heap_after_end,tc)166909cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msgvec_heap_after_end, tc)
167009cdbf04SKyle Evans {
167109cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msgvec_heap_after_end,tc)16721f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msgvec_heap_after_end, tc)
16731f155d48SKyle Evans {
16741f155d48SKyle Evans #define BUF __stack.__buf
16751f155d48SKyle Evans struct {
16761f155d48SKyle Evans uint8_t padding_l;
16771f155d48SKyle Evans struct mmsghdr * __buf;
16781f155d48SKyle Evans uint8_t padding_r;
16791f155d48SKyle Evans } __stack;
16801f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (2);
16811f155d48SKyle Evans const size_t __len = 2 + 1;
16821f155d48SKyle Evans const size_t __idx __unused = __len - 1;
16831f155d48SKyle Evans pid_t __child;
16841f155d48SKyle Evans int __status;
16851f155d48SKyle Evans int sock[2] = { -1, -1 };
16861f155d48SKyle Evans
16871f155d48SKyle Evans __child = fork();
16881f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
16891f155d48SKyle Evans if (__child > 0)
16901f155d48SKyle Evans goto monitor;
16911f155d48SKyle Evans
16921f155d48SKyle Evans /* Child */
16931f155d48SKyle Evans disable_coredumps();
16941f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
16951f155d48SKyle Evans
16961f155d48SKyle Evans recvmmsg(sock[0], __stack.__buf, __len, 0, NULL);
16971f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
16981f155d48SKyle Evans
16991f155d48SKyle Evans monitor:
17001f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
17011f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
17021f155d48SKyle Evans }
17031f155d48SKyle Evans
17041f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
17051f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
17061f155d48SKyle Evans case EX_SOFTWARE:
17071f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
17081f155d48SKyle Evans break;
17091f155d48SKyle Evans case EX_OSERR:
17101f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
17111f155d48SKyle Evans break;
17121f155d48SKyle Evans default:
17131f155d48SKyle Evans atf_tc_fail("child exited with status %d",
17141f155d48SKyle Evans WEXITSTATUS(__status));
17151f155d48SKyle Evans }
17161f155d48SKyle Evans } else {
17171f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
17181f155d48SKyle Evans }
17191f155d48SKyle Evans #undef BUF
17201f155d48SKyle Evans
17211f155d48SKyle Evans }
17221f155d48SKyle Evans
172309cdbf04SKyle Evans ATF_TC(recvmmsg_msghdr_before_end);
ATF_TC_HEAD(recvmmsg_msghdr_before_end,tc)172409cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msghdr_before_end, tc)
172509cdbf04SKyle Evans {
172609cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msghdr_before_end,tc)17271f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msghdr_before_end, tc)
17281f155d48SKyle Evans {
17291f155d48SKyle Evans #define BUF &__stack.__buf
17301f155d48SKyle Evans struct {
17311f155d48SKyle Evans uint8_t padding_l;
17321f155d48SKyle Evans unsigned char __buf[42];
17331f155d48SKyle Evans uint8_t padding_r;
17341f155d48SKyle Evans } __stack;
17351f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
17361f155d48SKyle Evans const size_t __len = 42 - 1;
17371f155d48SKyle Evans const size_t __idx __unused = __len - 1;
17381f155d48SKyle Evans int sock[2] = { -1, -1 };
17391f155d48SKyle Evans struct mmsghdr msgvec[2];
17401f155d48SKyle Evans
17411f155d48SKyle Evans memset(&msgvec[0], 0, sizeof(msgvec));
17421f155d48SKyle Evans
17431f155d48SKyle Evans /*
17441f155d48SKyle Evans * Same as above, make sure fortification isn't ignoring n > 1 elements
17451f155d48SKyle Evans * of the msgvec.
17461f155d48SKyle Evans */
17471f155d48SKyle Evans msgvec[1].msg_hdr.msg_control = BUF;
17481f155d48SKyle Evans msgvec[1].msg_hdr.msg_controllen = __len;
17491f155d48SKyle Evans
17501f155d48SKyle Evans recvmmsg(sock[0], &msgvec[0], nitems(msgvec), 0, NULL);
17511f155d48SKyle Evans #undef BUF
17521f155d48SKyle Evans
17531f155d48SKyle Evans }
17541f155d48SKyle Evans
175509cdbf04SKyle Evans ATF_TC(recvmmsg_msghdr_end);
ATF_TC_HEAD(recvmmsg_msghdr_end,tc)175609cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msghdr_end, tc)
175709cdbf04SKyle Evans {
175809cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msghdr_end,tc)17591f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msghdr_end, tc)
17601f155d48SKyle Evans {
17611f155d48SKyle Evans #define BUF &__stack.__buf
17621f155d48SKyle Evans struct {
17631f155d48SKyle Evans uint8_t padding_l;
17641f155d48SKyle Evans unsigned char __buf[42];
17651f155d48SKyle Evans uint8_t padding_r;
17661f155d48SKyle Evans } __stack;
17671f155d48SKyle Evans const size_t __bufsz __unused = sizeof(__stack.__buf);
17681f155d48SKyle Evans const size_t __len = 42;
17691f155d48SKyle Evans const size_t __idx __unused = __len - 1;
17701f155d48SKyle Evans int sock[2] = { -1, -1 };
17711f155d48SKyle Evans struct mmsghdr msgvec[2];
17721f155d48SKyle Evans
17731f155d48SKyle Evans memset(&msgvec[0], 0, sizeof(msgvec));
17741f155d48SKyle Evans
17751f155d48SKyle Evans /*
17761f155d48SKyle Evans * Same as above, make sure fortification isn't ignoring n > 1 elements
17771f155d48SKyle Evans * of the msgvec.
17781f155d48SKyle Evans */
17791f155d48SKyle Evans msgvec[1].msg_hdr.msg_control = BUF;
17801f155d48SKyle Evans msgvec[1].msg_hdr.msg_controllen = __len;
17811f155d48SKyle Evans
17821f155d48SKyle Evans recvmmsg(sock[0], &msgvec[0], nitems(msgvec), 0, NULL);
17831f155d48SKyle Evans #undef BUF
17841f155d48SKyle Evans
17851f155d48SKyle Evans }
17861f155d48SKyle Evans
178709cdbf04SKyle Evans ATF_TC(recvmmsg_msghdr_heap_before_end);
ATF_TC_HEAD(recvmmsg_msghdr_heap_before_end,tc)178809cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msghdr_heap_before_end, tc)
178909cdbf04SKyle Evans {
179009cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msghdr_heap_before_end,tc)17911f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msghdr_heap_before_end, tc)
17921f155d48SKyle Evans {
17931f155d48SKyle Evans #define BUF __stack.__buf
17941f155d48SKyle Evans struct {
17951f155d48SKyle Evans uint8_t padding_l;
17961f155d48SKyle Evans unsigned char * __buf;
17971f155d48SKyle Evans uint8_t padding_r;
17981f155d48SKyle Evans } __stack;
17991f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
18001f155d48SKyle Evans const size_t __len = 42 - 1;
18011f155d48SKyle Evans const size_t __idx __unused = __len - 1;
18021f155d48SKyle Evans int sock[2] = { -1, -1 };
18031f155d48SKyle Evans struct mmsghdr msgvec[2];
18041f155d48SKyle Evans
18051f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
18061f155d48SKyle Evans memset(&msgvec[0], 0, sizeof(msgvec));
18071f155d48SKyle Evans
18081f155d48SKyle Evans /*
18091f155d48SKyle Evans * Same as above, make sure fortification isn't ignoring n > 1 elements
18101f155d48SKyle Evans * of the msgvec.
18111f155d48SKyle Evans */
18121f155d48SKyle Evans msgvec[1].msg_hdr.msg_control = BUF;
18131f155d48SKyle Evans msgvec[1].msg_hdr.msg_controllen = __len;
18141f155d48SKyle Evans
18151f155d48SKyle Evans recvmmsg(sock[0], &msgvec[0], nitems(msgvec), 0, NULL);
18161f155d48SKyle Evans #undef BUF
18171f155d48SKyle Evans
18181f155d48SKyle Evans }
18191f155d48SKyle Evans
182009cdbf04SKyle Evans ATF_TC(recvmmsg_msghdr_heap_end);
ATF_TC_HEAD(recvmmsg_msghdr_heap_end,tc)182109cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msghdr_heap_end, tc)
182209cdbf04SKyle Evans {
182309cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msghdr_heap_end,tc)18241f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msghdr_heap_end, tc)
18251f155d48SKyle Evans {
18261f155d48SKyle Evans #define BUF __stack.__buf
18271f155d48SKyle Evans struct {
18281f155d48SKyle Evans uint8_t padding_l;
18291f155d48SKyle Evans unsigned char * __buf;
18301f155d48SKyle Evans uint8_t padding_r;
18311f155d48SKyle Evans } __stack;
18321f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
18331f155d48SKyle Evans const size_t __len = 42;
18341f155d48SKyle Evans const size_t __idx __unused = __len - 1;
18351f155d48SKyle Evans int sock[2] = { -1, -1 };
18361f155d48SKyle Evans struct mmsghdr msgvec[2];
18371f155d48SKyle Evans
18381f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
18391f155d48SKyle Evans memset(&msgvec[0], 0, sizeof(msgvec));
18401f155d48SKyle Evans
18411f155d48SKyle Evans /*
18421f155d48SKyle Evans * Same as above, make sure fortification isn't ignoring n > 1 elements
18431f155d48SKyle Evans * of the msgvec.
18441f155d48SKyle Evans */
18451f155d48SKyle Evans msgvec[1].msg_hdr.msg_control = BUF;
18461f155d48SKyle Evans msgvec[1].msg_hdr.msg_controllen = __len;
18471f155d48SKyle Evans
18481f155d48SKyle Evans recvmmsg(sock[0], &msgvec[0], nitems(msgvec), 0, NULL);
18491f155d48SKyle Evans #undef BUF
18501f155d48SKyle Evans
18511f155d48SKyle Evans }
18521f155d48SKyle Evans
185309cdbf04SKyle Evans ATF_TC(recvmmsg_msghdr_heap_after_end);
ATF_TC_HEAD(recvmmsg_msghdr_heap_after_end,tc)185409cdbf04SKyle Evans ATF_TC_HEAD(recvmmsg_msghdr_heap_after_end, tc)
185509cdbf04SKyle Evans {
185609cdbf04SKyle Evans }
ATF_TC_BODY(recvmmsg_msghdr_heap_after_end,tc)18571f155d48SKyle Evans ATF_TC_BODY(recvmmsg_msghdr_heap_after_end, tc)
18581f155d48SKyle Evans {
18591f155d48SKyle Evans #define BUF __stack.__buf
18601f155d48SKyle Evans struct {
18611f155d48SKyle Evans uint8_t padding_l;
18621f155d48SKyle Evans unsigned char * __buf;
18631f155d48SKyle Evans uint8_t padding_r;
18641f155d48SKyle Evans } __stack;
18651f155d48SKyle Evans const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);
18661f155d48SKyle Evans const size_t __len = 42 + 1;
18671f155d48SKyle Evans const size_t __idx __unused = __len - 1;
18681f155d48SKyle Evans pid_t __child;
18691f155d48SKyle Evans int __status;
18701f155d48SKyle Evans int sock[2] = { -1, -1 };
18711f155d48SKyle Evans struct mmsghdr msgvec[2];
18721f155d48SKyle Evans
18731f155d48SKyle Evans __child = fork();
18741f155d48SKyle Evans ATF_REQUIRE(__child >= 0);
18751f155d48SKyle Evans if (__child > 0)
18761f155d48SKyle Evans goto monitor;
18771f155d48SKyle Evans
18781f155d48SKyle Evans /* Child */
18791f155d48SKyle Evans disable_coredumps();
18801f155d48SKyle Evans __stack.__buf = malloc(__bufsz);
18811f155d48SKyle Evans memset(&msgvec[0], 0, sizeof(msgvec));
18821f155d48SKyle Evans
18831f155d48SKyle Evans /*
18841f155d48SKyle Evans * Same as above, make sure fortification isn't ignoring n > 1 elements
18851f155d48SKyle Evans * of the msgvec.
18861f155d48SKyle Evans */
18871f155d48SKyle Evans msgvec[1].msg_hdr.msg_control = BUF;
18881f155d48SKyle Evans msgvec[1].msg_hdr.msg_controllen = __len;
18891f155d48SKyle Evans
18901f155d48SKyle Evans recvmmsg(sock[0], &msgvec[0], nitems(msgvec), 0, NULL);
18911f155d48SKyle Evans _exit(EX_SOFTWARE); /* Should have aborted. */
18921f155d48SKyle Evans
18931f155d48SKyle Evans monitor:
18941f155d48SKyle Evans while (waitpid(__child, &__status, 0) != __child) {
18951f155d48SKyle Evans ATF_REQUIRE_EQ(EINTR, errno);
18961f155d48SKyle Evans }
18971f155d48SKyle Evans
18981f155d48SKyle Evans if (!WIFSIGNALED(__status)) {
18991f155d48SKyle Evans switch (WEXITSTATUS(__status)) {
19001f155d48SKyle Evans case EX_SOFTWARE:
19011f155d48SKyle Evans atf_tc_fail("FORTIFY_SOURCE failed to abort");
19021f155d48SKyle Evans break;
19031f155d48SKyle Evans case EX_OSERR:
19041f155d48SKyle Evans atf_tc_fail("setrlimit(2) failed");
19051f155d48SKyle Evans break;
19061f155d48SKyle Evans default:
19071f155d48SKyle Evans atf_tc_fail("child exited with status %d",
19081f155d48SKyle Evans WEXITSTATUS(__status));
19091f155d48SKyle Evans }
19101f155d48SKyle Evans } else {
19111f155d48SKyle Evans ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));
19121f155d48SKyle Evans }
19131f155d48SKyle Evans #undef BUF
19141f155d48SKyle Evans
19151f155d48SKyle Evans }
19161f155d48SKyle Evans
ATF_TP_ADD_TCS(tp)19171f155d48SKyle Evans ATF_TP_ADD_TCS(tp)
19181f155d48SKyle Evans {
19191f155d48SKyle Evans ATF_TP_ADD_TC(tp, getpeername_before_end);
19201f155d48SKyle Evans ATF_TP_ADD_TC(tp, getpeername_end);
19211f155d48SKyle Evans ATF_TP_ADD_TC(tp, getpeername_heap_before_end);
19221f155d48SKyle Evans ATF_TP_ADD_TC(tp, getpeername_heap_end);
19231f155d48SKyle Evans ATF_TP_ADD_TC(tp, getpeername_heap_after_end);
19241f155d48SKyle Evans ATF_TP_ADD_TC(tp, getsockname_before_end);
19251f155d48SKyle Evans ATF_TP_ADD_TC(tp, getsockname_end);
19261f155d48SKyle Evans ATF_TP_ADD_TC(tp, getsockname_heap_before_end);
19271f155d48SKyle Evans ATF_TP_ADD_TC(tp, getsockname_heap_end);
19281f155d48SKyle Evans ATF_TP_ADD_TC(tp, getsockname_heap_after_end);
19291f155d48SKyle Evans ATF_TP_ADD_TC(tp, recv_before_end);
19301f155d48SKyle Evans ATF_TP_ADD_TC(tp, recv_end);
19311f155d48SKyle Evans ATF_TP_ADD_TC(tp, recv_heap_before_end);
19321f155d48SKyle Evans ATF_TP_ADD_TC(tp, recv_heap_end);
19331f155d48SKyle Evans ATF_TP_ADD_TC(tp, recv_heap_after_end);
19341f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvfrom_before_end);
19351f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvfrom_end);
19361f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvfrom_heap_before_end);
19371f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvfrom_heap_end);
19381f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvfrom_heap_after_end);
19391f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvfrom_sockaddr_before_end);
19401f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvfrom_sockaddr_end);
19411f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvfrom_sockaddr_heap_before_end);
19421f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvfrom_sockaddr_heap_end);
19431f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvfrom_sockaddr_heap_after_end);
19441f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_name_before_end);
19451f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_name_end);
19461f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_name_heap_before_end);
19471f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_name_heap_end);
19481f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_name_heap_after_end);
19491f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_iov_before_end);
19501f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_iov_end);
19511f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_iov_heap_before_end);
19521f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_iov_heap_end);
19531f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_iov_heap_after_end);
19541f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_control_before_end);
19551f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_control_end);
19561f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_control_heap_before_end);
19571f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_control_heap_end);
19581f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmsg_msg_control_heap_after_end);
19591f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msgvec_before_end);
19601f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msgvec_end);
19611f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msgvec_after_end);
19621f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msgvec_heap_before_end);
19631f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msgvec_heap_end);
19641f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msgvec_heap_after_end);
19651f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msghdr_before_end);
19661f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msghdr_end);
19671f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msghdr_heap_before_end);
19681f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msghdr_heap_end);
19691f155d48SKyle Evans ATF_TP_ADD_TC(tp, recvmmsg_msghdr_heap_after_end);
19701f155d48SKyle Evans return (atf_no_error());
19711f155d48SKyle Evans }
1972