]> granicus.if.org Git - strace/commitdiff
tests: extend coverage of sysinfo syscall
authorDmitry V. Levin <ldv@altlinux.org>
Sat, 6 Feb 2016 00:56:34 +0000 (00:56 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 8 Feb 2016 18:17:28 +0000 (18:17 +0000)
* 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.

tests/sysinfo.c
tests/sysinfo.test

index cbf975ddc7b5717866bc9e6b4e60b717b6383f22..377bdc9c1848a4b57c297fd339dea01042fd4ecd 100644 (file)
@@ -1,5 +1,8 @@
 /*
+ * This file is part of sysinfo strace test.
+ *
  * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
+ * Copyright (c) 2016 Dmitry V. Levin <ldv@altlinux.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 #include <sys/sysinfo.h>
 
 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;
 }
index 370677888c5214f2121ee82fbd6b22585de85fef..c6170e38de97697b7929382c91325fea775b1aff 100755 (executable)
@@ -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"