aboutsummaryrefslogtreecommitdiffstats
path: root/executor/common_test.h
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-08-03 19:48:30 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-08-03 19:53:14 +0200
commit78e3ad98f6120342ae56b9812c695637fc245c75 (patch)
tree47b2d2f40d053d755c07f937b53daea99c282991 /executor/common_test.h
parent5ba57bfe16056e7657e29ca6e5ef5b1446f8fce6 (diff)
sys/test: add more tests
Add syz_errno syscall which sets errno to the argument, and add a test with different errno values. This mostly tests the testing infrastructure itself. Add syz_compare syscall which compare two blobs, this can be used for testing of argument memory layout. Implement syz_mmap and fix Makefile to allow building syz-execprog for test OS. Useful for debugging. Update #603
Diffstat (limited to 'executor/common_test.h')
-rw-r--r--executor/common_test.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/executor/common_test.h b/executor/common_test.h
index 78b3f8e22..75ec81721 100644
--- a/executor/common_test.h
+++ b/executor/common_test.h
@@ -7,8 +7,43 @@
#include <unistd.h>
#if SYZ_EXECUTOR || __NR_syz_mmap
+#include <sys/mman.h>
+
+// syz_mmap(addr vma, len len[addr])
static long syz_mmap(long a0, long a1)
{
+ return (long)mmap((void*)a0, a1, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE | MAP_FIXED, -1, 0);
+}
+#endif
+
+#if SYZ_EXECUTOR || __NR_syz_errno
+#include <errno.h>
+
+// syz_errno(v int32)
+static long syz_errno(long v)
+{
+ errno = v;
+ return v == 0 ? 0 : -1;
+}
+#endif
+
+#if SYZ_EXECUTOR || __NR_syz_compare
+#include <errno.h>
+#include <string.h>
+
+// syz_compare(want ptr[in, string], want_len len[want], got ptr[in, compare_data], got_len len[got])
+static long syz_compare(long want, long want_len, long got, long got_len)
+{
+ if (want_len != got_len) {
+ debug("syz_compare: want_len=%lu got_len=%lu\n", want_len, got_len);
+ errno = EBADF;
+ return -1;
+ }
+ if (memcmp((void*)want, (void*)got, want_len)) {
+ debug("syz_compare: data differs\n");
+ errno = EINVAL;
+ return -1;
+ }
return 0;
}
#endif