From: Dmitry V. Levin Date: Sat, 6 Feb 2016 00:56:34 +0000 (+0000) Subject: tests: extend coverage of sysinfo syscall X-Git-Tag: v4.12~584 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b5a7011d7135bc6d0469edd837314c8f4a20d37e;p=strace tests: extend coverage of sysinfo syscall * tests/sysinfo.c (main): Check decoding of NULL struct sysinfo pointer. Check decoding of struct sysinfo located at the end of page boundary. * tests/sysinfo.test: Update. --- diff --git a/tests/sysinfo.c b/tests/sysinfo.c index cbf975dd..377bdc9c 100644 --- a/tests/sysinfo.c +++ b/tests/sysinfo.c @@ -1,5 +1,8 @@ /* + * This file is part of sysinfo strace test. + * * Copyright (c) 2015 Elvira Khabirova + * Copyright (c) 2016 Dmitry V. Levin * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,10 +33,14 @@ #include int -main (void) +main(void) { - struct sysinfo si; - if (sysinfo(&si)) + sysinfo(NULL); + printf("sysinfo(NULL) = -1 EFAULT (%m)\n"); + + struct sysinfo * const si = tail_alloc(sizeof(*si)); + + if (sysinfo(si)) perror_msg_and_skip("sysinfo"); printf("sysinfo({uptime=%llu" ", loads=[%llu, %llu, %llu]" @@ -47,22 +54,23 @@ main (void) ", totalhigh=%llu" ", freehigh=%llu" ", mem_unit=%u" - "}) = 0\n", - (unsigned long long) si.uptime - , (unsigned long long) si.loads[0] - , (unsigned long long) si.loads[1] - , (unsigned long long) si.loads[2] - , (unsigned long long) si.totalram - , (unsigned long long) si.freeram - , (unsigned long long) si.sharedram - , (unsigned long long) si.bufferram - , (unsigned long long) si.totalswap - , (unsigned long long) si.freeswap - , (unsigned) si.procs - , (unsigned long long) si.totalhigh - , (unsigned long long) si.freehigh - , si.mem_unit + "}) = 0\n" + , (unsigned long long) si->uptime + , (unsigned long long) si->loads[0] + , (unsigned long long) si->loads[1] + , (unsigned long long) si->loads[2] + , (unsigned long long) si->totalram + , (unsigned long long) si->freeram + , (unsigned long long) si->sharedram + , (unsigned long long) si->bufferram + , (unsigned long long) si->totalswap + , (unsigned long long) si->freeswap + , (unsigned) si->procs + , (unsigned long long) si->totalhigh + , (unsigned long long) si->freehigh + , si->mem_unit ); + puts("+++ exited with 0 +++"); return 0; } diff --git a/tests/sysinfo.test b/tests/sysinfo.test index 37067788..c6170e38 100755 --- a/tests/sysinfo.test +++ b/tests/sysinfo.test @@ -6,7 +6,7 @@ run_prog > /dev/null OUT="$LOG.out" -run_strace -esysinfo $args > "$OUT" +run_strace -a14 -esysinfo $args > "$OUT" match_diff "$LOG" "$OUT" rm -f "$OUT"