| // Copyright 2018 syzkaller project authors. All rights reserved. |
| // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. |
| |
| // This file is shared between executor and csource package. |
| |
| #include <stdlib.h> |
| #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 |
| |
| #if SYZ_EXECUTOR || SYZ_SANDBOX_NONE |
| static void loop(); |
| static int do_sandbox_none(void) |
| { |
| loop(); |
| doexit(0); |
| } |
| #endif |
| |
| #if SYZ_EXECUTOR |
| #define do_sandbox_setuid() 0 |
| #define do_sandbox_namespace() 0 |
| #endif |