Path: blob/main/lib/libc/tests/secure/fortify_uio_test.c
39553 views
/* @generated by `generate-fortify-tests.lua "uio"` */12#define _FORTIFY_SOURCE 23#define TMPFILE_SIZE (1024 * 32)45#include <sys/param.h>6#include <sys/jail.h>7#include <sys/random.h>8#include <sys/resource.h>9#include <sys/select.h>10#include <sys/socket.h>11#include <sys/time.h>12#include <sys/uio.h>13#include <sys/wait.h>14#include <dirent.h>15#include <errno.h>16#include <fcntl.h>17#include <limits.h>18#include <poll.h>19#include <signal.h>20#include <stdio.h>21#include <stdlib.h>22#include <string.h>23#include <strings.h>24#include <sysexits.h>25#include <unistd.h>26#include <wchar.h>27#include <atf-c.h>2829static FILE * __unused30new_fp(size_t __len)31{32static char fpbuf[LINE_MAX];33FILE *fp;3435ATF_REQUIRE(__len <= sizeof(fpbuf));3637memset(fpbuf, 'A', sizeof(fpbuf) - 1);38fpbuf[sizeof(fpbuf) - 1] = '\0';3940fp = fmemopen(fpbuf, sizeof(fpbuf), "rb");41ATF_REQUIRE(fp != NULL);4243return (fp);44}4546/*47* Create a new symlink to use for readlink(2) style tests, we'll just use a48* random target name to have something interesting to look at.49*/50static const char * __unused51new_symlink(size_t __len)52{53static const char linkname[] = "link";54char target[MAXNAMLEN];55int error;5657ATF_REQUIRE(__len <= sizeof(target));5859arc4random_buf(target, sizeof(target));6061error = unlink(linkname);62ATF_REQUIRE(error == 0 || errno == ENOENT);6364error = symlink(target, linkname);65ATF_REQUIRE(error == 0);6667return (linkname);68}6970/*71* For our purposes, first descriptor will be the reader; we'll send both72* raw data and a control message over it so that the result can be used for73* any of our recv*() tests.74*/75static void __unused76new_socket(int sock[2])77{78unsigned char ctrl[CMSG_SPACE(sizeof(int))] = { 0 };79static char sockbuf[256];80ssize_t rv;81size_t total = 0;82struct msghdr hdr = { 0 };83struct cmsghdr *cmsg;84int error, fd;8586error = socketpair(AF_UNIX, SOCK_STREAM, 0, sock);87ATF_REQUIRE(error == 0);8889while (total != sizeof(sockbuf)) {90rv = send(sock[1], &sockbuf[total], sizeof(sockbuf) - total, 0);9192ATF_REQUIRE_MSG(rv > 0,93"expected bytes sent, got %zd with %zu left (size %zu, total %zu)",94rv, sizeof(sockbuf) - total, sizeof(sockbuf), total);95ATF_REQUIRE_MSG(total + (size_t)rv <= sizeof(sockbuf),96"%zd exceeds total %zu", rv, sizeof(sockbuf));97total += rv;98}99100hdr.msg_control = ctrl;101hdr.msg_controllen = sizeof(ctrl);102103cmsg = CMSG_FIRSTHDR(&hdr);104cmsg->cmsg_level = SOL_SOCKET;105cmsg->cmsg_type = SCM_RIGHTS;106cmsg->cmsg_len = CMSG_LEN(sizeof(fd));107fd = STDIN_FILENO;108memcpy(CMSG_DATA(cmsg), &fd, sizeof(fd));109110error = sendmsg(sock[1], &hdr, 0);111ATF_REQUIRE(error != -1);112}113114/*115* Constructs a tmpfile that we can use for testing read(2) and friends.116*/117static int __unused118new_tmpfile(void)119{120char buf[1024];121ssize_t rv;122size_t written;123int fd;124125fd = open("tmpfile", O_RDWR | O_CREAT | O_TRUNC, 0644);126ATF_REQUIRE(fd >= 0);127128written = 0;129while (written < TMPFILE_SIZE) {130rv = write(fd, buf, sizeof(buf));131ATF_REQUIRE(rv > 0);132133written += rv;134}135136ATF_REQUIRE_EQ(0, lseek(fd, 0, SEEK_SET));137return (fd);138}139140static void141disable_coredumps(void)142{143struct rlimit rl = { 0 };144145if (setrlimit(RLIMIT_CORE, &rl) == -1)146_exit(EX_OSERR);147}148149/*150* Replaces stdin with a file that we can actually read from, for tests where151* we want a FILE * or fd that we can get data from.152*/153static void __unused154replace_stdin(void)155{156int fd;157158fd = new_tmpfile();159160(void)dup2(fd, STDIN_FILENO);161if (fd != STDIN_FILENO)162close(fd);163}164165ATF_TC(readv_before_end);166ATF_TC_HEAD(readv_before_end, tc)167{168}169ATF_TC_BODY(readv_before_end, tc)170{171#define BUF &__stack.__buf172struct {173uint8_t padding_l;174struct iovec __buf[2];175uint8_t padding_r;176} __stack;177const size_t __bufsz __unused = sizeof(__stack.__buf);178const size_t __len = 2 - 1;179const size_t __idx __unused = __len - 1;180181readv(STDIN_FILENO, __stack.__buf, __len);182#undef BUF183184}185186ATF_TC(readv_end);187ATF_TC_HEAD(readv_end, tc)188{189}190ATF_TC_BODY(readv_end, tc)191{192#define BUF &__stack.__buf193struct {194uint8_t padding_l;195struct iovec __buf[2];196uint8_t padding_r;197} __stack;198const size_t __bufsz __unused = sizeof(__stack.__buf);199const size_t __len = 2;200const size_t __idx __unused = __len - 1;201202readv(STDIN_FILENO, __stack.__buf, __len);203#undef BUF204205}206207ATF_TC(readv_after_end);208ATF_TC_HEAD(readv_after_end, tc)209{210}211ATF_TC_BODY(readv_after_end, tc)212{213#define BUF &__stack.__buf214struct {215uint8_t padding_l;216struct iovec __buf[2];217uint8_t padding_r;218} __stack;219const size_t __bufsz __unused = sizeof(__stack.__buf);220const size_t __len = 2 + 1;221const size_t __idx __unused = __len - 1;222pid_t __child;223int __status;224225__child = fork();226ATF_REQUIRE(__child >= 0);227if (__child > 0)228goto monitor;229230/* Child */231disable_coredumps();232readv(STDIN_FILENO, __stack.__buf, __len);233_exit(EX_SOFTWARE); /* Should have aborted. */234235monitor:236while (waitpid(__child, &__status, 0) != __child) {237ATF_REQUIRE_EQ(EINTR, errno);238}239240if (!WIFSIGNALED(__status)) {241switch (WEXITSTATUS(__status)) {242case EX_SOFTWARE:243atf_tc_fail("FORTIFY_SOURCE failed to abort");244break;245case EX_OSERR:246atf_tc_fail("setrlimit(2) failed");247break;248default:249atf_tc_fail("child exited with status %d",250WEXITSTATUS(__status));251}252} else {253ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));254}255#undef BUF256257}258259ATF_TC(readv_heap_before_end);260ATF_TC_HEAD(readv_heap_before_end, tc)261{262}263ATF_TC_BODY(readv_heap_before_end, tc)264{265#define BUF __stack.__buf266struct {267uint8_t padding_l;268struct iovec * __buf;269uint8_t padding_r;270} __stack;271const size_t __bufsz __unused = sizeof(*__stack.__buf) * (2);272const size_t __len = 2 - 1;273const size_t __idx __unused = __len - 1;274275__stack.__buf = malloc(__bufsz);276277readv(STDIN_FILENO, __stack.__buf, __len);278#undef BUF279280}281282ATF_TC(readv_heap_end);283ATF_TC_HEAD(readv_heap_end, tc)284{285}286ATF_TC_BODY(readv_heap_end, tc)287{288#define BUF __stack.__buf289struct {290uint8_t padding_l;291struct iovec * __buf;292uint8_t padding_r;293} __stack;294const size_t __bufsz __unused = sizeof(*__stack.__buf) * (2);295const size_t __len = 2;296const size_t __idx __unused = __len - 1;297298__stack.__buf = malloc(__bufsz);299300readv(STDIN_FILENO, __stack.__buf, __len);301#undef BUF302303}304305ATF_TC(readv_heap_after_end);306ATF_TC_HEAD(readv_heap_after_end, tc)307{308}309ATF_TC_BODY(readv_heap_after_end, tc)310{311#define BUF __stack.__buf312struct {313uint8_t padding_l;314struct iovec * __buf;315uint8_t padding_r;316} __stack;317const size_t __bufsz __unused = sizeof(*__stack.__buf) * (2);318const size_t __len = 2 + 1;319const size_t __idx __unused = __len - 1;320pid_t __child;321int __status;322323__child = fork();324ATF_REQUIRE(__child >= 0);325if (__child > 0)326goto monitor;327328/* Child */329disable_coredumps();330__stack.__buf = malloc(__bufsz);331332readv(STDIN_FILENO, __stack.__buf, __len);333_exit(EX_SOFTWARE); /* Should have aborted. */334335monitor:336while (waitpid(__child, &__status, 0) != __child) {337ATF_REQUIRE_EQ(EINTR, errno);338}339340if (!WIFSIGNALED(__status)) {341switch (WEXITSTATUS(__status)) {342case EX_SOFTWARE:343atf_tc_fail("FORTIFY_SOURCE failed to abort");344break;345case EX_OSERR:346atf_tc_fail("setrlimit(2) failed");347break;348default:349atf_tc_fail("child exited with status %d",350WEXITSTATUS(__status));351}352} else {353ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));354}355#undef BUF356357}358359ATF_TC(readv_iov_before_end);360ATF_TC_HEAD(readv_iov_before_end, tc)361{362}363ATF_TC_BODY(readv_iov_before_end, tc)364{365#define BUF &__stack.__buf366struct {367uint8_t padding_l;368unsigned char __buf[42];369uint8_t padding_r;370} __stack;371const size_t __bufsz __unused = sizeof(__stack.__buf);372const size_t __len = 42 - 1;373const size_t __idx __unused = __len - 1;374struct iovec iov[1];375376iov[0].iov_base = __stack.__buf;377iov[0].iov_len = __len;378379replace_stdin();380381readv(STDIN_FILENO, iov, nitems(iov));382#undef BUF383384}385386ATF_TC(readv_iov_end);387ATF_TC_HEAD(readv_iov_end, tc)388{389}390ATF_TC_BODY(readv_iov_end, tc)391{392#define BUF &__stack.__buf393struct {394uint8_t padding_l;395unsigned char __buf[42];396uint8_t padding_r;397} __stack;398const size_t __bufsz __unused = sizeof(__stack.__buf);399const size_t __len = 42;400const size_t __idx __unused = __len - 1;401struct iovec iov[1];402403iov[0].iov_base = __stack.__buf;404iov[0].iov_len = __len;405406replace_stdin();407408readv(STDIN_FILENO, iov, nitems(iov));409#undef BUF410411}412413ATF_TC(readv_iov_heap_before_end);414ATF_TC_HEAD(readv_iov_heap_before_end, tc)415{416}417ATF_TC_BODY(readv_iov_heap_before_end, tc)418{419#define BUF __stack.__buf420struct {421uint8_t padding_l;422unsigned char * __buf;423uint8_t padding_r;424} __stack;425const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);426const size_t __len = 42 - 1;427const size_t __idx __unused = __len - 1;428struct iovec iov[1];429430__stack.__buf = malloc(__bufsz);431iov[0].iov_base = __stack.__buf;432iov[0].iov_len = __len;433434replace_stdin();435436readv(STDIN_FILENO, iov, nitems(iov));437#undef BUF438439}440441ATF_TC(readv_iov_heap_end);442ATF_TC_HEAD(readv_iov_heap_end, tc)443{444}445ATF_TC_BODY(readv_iov_heap_end, tc)446{447#define BUF __stack.__buf448struct {449uint8_t padding_l;450unsigned char * __buf;451uint8_t padding_r;452} __stack;453const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);454const size_t __len = 42;455const size_t __idx __unused = __len - 1;456struct iovec iov[1];457458__stack.__buf = malloc(__bufsz);459iov[0].iov_base = __stack.__buf;460iov[0].iov_len = __len;461462replace_stdin();463464readv(STDIN_FILENO, iov, nitems(iov));465#undef BUF466467}468469ATF_TC(readv_iov_heap_after_end);470ATF_TC_HEAD(readv_iov_heap_after_end, tc)471{472}473ATF_TC_BODY(readv_iov_heap_after_end, tc)474{475#define BUF __stack.__buf476struct {477uint8_t padding_l;478unsigned char * __buf;479uint8_t padding_r;480} __stack;481const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);482const size_t __len = 42 + 1;483const size_t __idx __unused = __len - 1;484pid_t __child;485int __status;486struct iovec iov[1];487488__child = fork();489ATF_REQUIRE(__child >= 0);490if (__child > 0)491goto monitor;492493/* Child */494disable_coredumps();495__stack.__buf = malloc(__bufsz);496iov[0].iov_base = __stack.__buf;497iov[0].iov_len = __len;498499replace_stdin();500501readv(STDIN_FILENO, iov, nitems(iov));502_exit(EX_SOFTWARE); /* Should have aborted. */503504monitor:505while (waitpid(__child, &__status, 0) != __child) {506ATF_REQUIRE_EQ(EINTR, errno);507}508509if (!WIFSIGNALED(__status)) {510switch (WEXITSTATUS(__status)) {511case EX_SOFTWARE:512atf_tc_fail("FORTIFY_SOURCE failed to abort");513break;514case EX_OSERR:515atf_tc_fail("setrlimit(2) failed");516break;517default:518atf_tc_fail("child exited with status %d",519WEXITSTATUS(__status));520}521} else {522ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));523}524#undef BUF525526}527528ATF_TC(preadv_before_end);529ATF_TC_HEAD(preadv_before_end, tc)530{531}532ATF_TC_BODY(preadv_before_end, tc)533{534#define BUF &__stack.__buf535struct {536uint8_t padding_l;537struct iovec __buf[2];538uint8_t padding_r;539} __stack;540const size_t __bufsz __unused = sizeof(__stack.__buf);541const size_t __len = 2 - 1;542const size_t __idx __unused = __len - 1;543544preadv(STDIN_FILENO, __stack.__buf, __len, 0);545#undef BUF546547}548549ATF_TC(preadv_end);550ATF_TC_HEAD(preadv_end, tc)551{552}553ATF_TC_BODY(preadv_end, tc)554{555#define BUF &__stack.__buf556struct {557uint8_t padding_l;558struct iovec __buf[2];559uint8_t padding_r;560} __stack;561const size_t __bufsz __unused = sizeof(__stack.__buf);562const size_t __len = 2;563const size_t __idx __unused = __len - 1;564565preadv(STDIN_FILENO, __stack.__buf, __len, 0);566#undef BUF567568}569570ATF_TC(preadv_after_end);571ATF_TC_HEAD(preadv_after_end, tc)572{573}574ATF_TC_BODY(preadv_after_end, tc)575{576#define BUF &__stack.__buf577struct {578uint8_t padding_l;579struct iovec __buf[2];580uint8_t padding_r;581} __stack;582const size_t __bufsz __unused = sizeof(__stack.__buf);583const size_t __len = 2 + 1;584const size_t __idx __unused = __len - 1;585pid_t __child;586int __status;587588__child = fork();589ATF_REQUIRE(__child >= 0);590if (__child > 0)591goto monitor;592593/* Child */594disable_coredumps();595preadv(STDIN_FILENO, __stack.__buf, __len, 0);596_exit(EX_SOFTWARE); /* Should have aborted. */597598monitor:599while (waitpid(__child, &__status, 0) != __child) {600ATF_REQUIRE_EQ(EINTR, errno);601}602603if (!WIFSIGNALED(__status)) {604switch (WEXITSTATUS(__status)) {605case EX_SOFTWARE:606atf_tc_fail("FORTIFY_SOURCE failed to abort");607break;608case EX_OSERR:609atf_tc_fail("setrlimit(2) failed");610break;611default:612atf_tc_fail("child exited with status %d",613WEXITSTATUS(__status));614}615} else {616ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));617}618#undef BUF619620}621622ATF_TC(preadv_heap_before_end);623ATF_TC_HEAD(preadv_heap_before_end, tc)624{625}626ATF_TC_BODY(preadv_heap_before_end, tc)627{628#define BUF __stack.__buf629struct {630uint8_t padding_l;631struct iovec * __buf;632uint8_t padding_r;633} __stack;634const size_t __bufsz __unused = sizeof(*__stack.__buf) * (2);635const size_t __len = 2 - 1;636const size_t __idx __unused = __len - 1;637638__stack.__buf = malloc(__bufsz);639640preadv(STDIN_FILENO, __stack.__buf, __len, 0);641#undef BUF642643}644645ATF_TC(preadv_heap_end);646ATF_TC_HEAD(preadv_heap_end, tc)647{648}649ATF_TC_BODY(preadv_heap_end, tc)650{651#define BUF __stack.__buf652struct {653uint8_t padding_l;654struct iovec * __buf;655uint8_t padding_r;656} __stack;657const size_t __bufsz __unused = sizeof(*__stack.__buf) * (2);658const size_t __len = 2;659const size_t __idx __unused = __len - 1;660661__stack.__buf = malloc(__bufsz);662663preadv(STDIN_FILENO, __stack.__buf, __len, 0);664#undef BUF665666}667668ATF_TC(preadv_heap_after_end);669ATF_TC_HEAD(preadv_heap_after_end, tc)670{671}672ATF_TC_BODY(preadv_heap_after_end, tc)673{674#define BUF __stack.__buf675struct {676uint8_t padding_l;677struct iovec * __buf;678uint8_t padding_r;679} __stack;680const size_t __bufsz __unused = sizeof(*__stack.__buf) * (2);681const size_t __len = 2 + 1;682const size_t __idx __unused = __len - 1;683pid_t __child;684int __status;685686__child = fork();687ATF_REQUIRE(__child >= 0);688if (__child > 0)689goto monitor;690691/* Child */692disable_coredumps();693__stack.__buf = malloc(__bufsz);694695preadv(STDIN_FILENO, __stack.__buf, __len, 0);696_exit(EX_SOFTWARE); /* Should have aborted. */697698monitor:699while (waitpid(__child, &__status, 0) != __child) {700ATF_REQUIRE_EQ(EINTR, errno);701}702703if (!WIFSIGNALED(__status)) {704switch (WEXITSTATUS(__status)) {705case EX_SOFTWARE:706atf_tc_fail("FORTIFY_SOURCE failed to abort");707break;708case EX_OSERR:709atf_tc_fail("setrlimit(2) failed");710break;711default:712atf_tc_fail("child exited with status %d",713WEXITSTATUS(__status));714}715} else {716ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));717}718#undef BUF719720}721722ATF_TC(preadv_iov_before_end);723ATF_TC_HEAD(preadv_iov_before_end, tc)724{725}726ATF_TC_BODY(preadv_iov_before_end, tc)727{728#define BUF &__stack.__buf729struct {730uint8_t padding_l;731unsigned char __buf[42];732uint8_t padding_r;733} __stack;734const size_t __bufsz __unused = sizeof(__stack.__buf);735const size_t __len = 42 - 1;736const size_t __idx __unused = __len - 1;737struct iovec iov[1];738739iov[0].iov_base = __stack.__buf;740iov[0].iov_len = __len;741742replace_stdin();743744preadv(STDIN_FILENO, iov, nitems(iov), 0);745#undef BUF746747}748749ATF_TC(preadv_iov_end);750ATF_TC_HEAD(preadv_iov_end, tc)751{752}753ATF_TC_BODY(preadv_iov_end, tc)754{755#define BUF &__stack.__buf756struct {757uint8_t padding_l;758unsigned char __buf[42];759uint8_t padding_r;760} __stack;761const size_t __bufsz __unused = sizeof(__stack.__buf);762const size_t __len = 42;763const size_t __idx __unused = __len - 1;764struct iovec iov[1];765766iov[0].iov_base = __stack.__buf;767iov[0].iov_len = __len;768769replace_stdin();770771preadv(STDIN_FILENO, iov, nitems(iov), 0);772#undef BUF773774}775776ATF_TC(preadv_iov_heap_before_end);777ATF_TC_HEAD(preadv_iov_heap_before_end, tc)778{779}780ATF_TC_BODY(preadv_iov_heap_before_end, tc)781{782#define BUF __stack.__buf783struct {784uint8_t padding_l;785unsigned char * __buf;786uint8_t padding_r;787} __stack;788const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);789const size_t __len = 42 - 1;790const size_t __idx __unused = __len - 1;791struct iovec iov[1];792793__stack.__buf = malloc(__bufsz);794iov[0].iov_base = __stack.__buf;795iov[0].iov_len = __len;796797replace_stdin();798799preadv(STDIN_FILENO, iov, nitems(iov), 0);800#undef BUF801802}803804ATF_TC(preadv_iov_heap_end);805ATF_TC_HEAD(preadv_iov_heap_end, tc)806{807}808ATF_TC_BODY(preadv_iov_heap_end, tc)809{810#define BUF __stack.__buf811struct {812uint8_t padding_l;813unsigned char * __buf;814uint8_t padding_r;815} __stack;816const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);817const size_t __len = 42;818const size_t __idx __unused = __len - 1;819struct iovec iov[1];820821__stack.__buf = malloc(__bufsz);822iov[0].iov_base = __stack.__buf;823iov[0].iov_len = __len;824825replace_stdin();826827preadv(STDIN_FILENO, iov, nitems(iov), 0);828#undef BUF829830}831832ATF_TC(preadv_iov_heap_after_end);833ATF_TC_HEAD(preadv_iov_heap_after_end, tc)834{835}836ATF_TC_BODY(preadv_iov_heap_after_end, tc)837{838#define BUF __stack.__buf839struct {840uint8_t padding_l;841unsigned char * __buf;842uint8_t padding_r;843} __stack;844const size_t __bufsz __unused = sizeof(*__stack.__buf) * (42);845const size_t __len = 42 + 1;846const size_t __idx __unused = __len - 1;847pid_t __child;848int __status;849struct iovec iov[1];850851__child = fork();852ATF_REQUIRE(__child >= 0);853if (__child > 0)854goto monitor;855856/* Child */857disable_coredumps();858__stack.__buf = malloc(__bufsz);859iov[0].iov_base = __stack.__buf;860iov[0].iov_len = __len;861862replace_stdin();863864preadv(STDIN_FILENO, iov, nitems(iov), 0);865_exit(EX_SOFTWARE); /* Should have aborted. */866867monitor:868while (waitpid(__child, &__status, 0) != __child) {869ATF_REQUIRE_EQ(EINTR, errno);870}871872if (!WIFSIGNALED(__status)) {873switch (WEXITSTATUS(__status)) {874case EX_SOFTWARE:875atf_tc_fail("FORTIFY_SOURCE failed to abort");876break;877case EX_OSERR:878atf_tc_fail("setrlimit(2) failed");879break;880default:881atf_tc_fail("child exited with status %d",882WEXITSTATUS(__status));883}884} else {885ATF_REQUIRE_EQ(SIGABRT, WTERMSIG(__status));886}887#undef BUF888889}890891ATF_TP_ADD_TCS(tp)892{893ATF_TP_ADD_TC(tp, readv_before_end);894ATF_TP_ADD_TC(tp, readv_end);895ATF_TP_ADD_TC(tp, readv_after_end);896ATF_TP_ADD_TC(tp, readv_heap_before_end);897ATF_TP_ADD_TC(tp, readv_heap_end);898ATF_TP_ADD_TC(tp, readv_heap_after_end);899ATF_TP_ADD_TC(tp, readv_iov_before_end);900ATF_TP_ADD_TC(tp, readv_iov_end);901ATF_TP_ADD_TC(tp, readv_iov_heap_before_end);902ATF_TP_ADD_TC(tp, readv_iov_heap_end);903ATF_TP_ADD_TC(tp, readv_iov_heap_after_end);904ATF_TP_ADD_TC(tp, preadv_before_end);905ATF_TP_ADD_TC(tp, preadv_end);906ATF_TP_ADD_TC(tp, preadv_after_end);907ATF_TP_ADD_TC(tp, preadv_heap_before_end);908ATF_TP_ADD_TC(tp, preadv_heap_end);909ATF_TP_ADD_TC(tp, preadv_heap_after_end);910ATF_TP_ADD_TC(tp, preadv_iov_before_end);911ATF_TP_ADD_TC(tp, preadv_iov_end);912ATF_TP_ADD_TC(tp, preadv_iov_heap_before_end);913ATF_TP_ADD_TC(tp, preadv_iov_heap_end);914ATF_TP_ADD_TC(tp, preadv_iov_heap_after_end);915return (atf_no_error());916}917918919