diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-08-03 19:48:30 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-08-03 19:53:14 +0200 |
| commit | 78e3ad98f6120342ae56b9812c695637fc245c75 (patch) | |
| tree | 47b2d2f40d053d755c07f937b53daea99c282991 /executor/common_test.h | |
| parent | 5ba57bfe16056e7657e29ca6e5ef5b1446f8fce6 (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.h | 35 |
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 |
