From 8793f74c6cb46d87b53758c6d99705b8018ceeba Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 16 Oct 2017 19:23:13 +0200 Subject: sys/fuchsia: more descriptions --- executor/common_fuchsia.h | 43 +++++++++++ executor/executor_fuchsia.cc | 3 +- executor/syscalls_fuchsia.h | 172 +++++++++++++++++++++++++++++++++++++------ 3 files changed, 193 insertions(+), 25 deletions(-) (limited to 'executor') diff --git a/executor/common_fuchsia.h b/executor/common_fuchsia.h index 092734d66..f3889daec 100644 --- a/executor/common_fuchsia.h +++ b/executor/common_fuchsia.h @@ -3,7 +3,14 @@ // This file is shared between executor and csource package. +#include +#include +#include +#include +#include +#include #include +#include #include #include #if defined(SYZ_EXECUTOR) || defined(SYZ_THREADED) || defined(SYZ_COLLIDE) @@ -191,3 +198,39 @@ long syz_job_default() return zx_job_default(); } #endif + +#if defined(SYZ_EXECUTOR) || defined(__NR_syz_future_time) +long syz_future_time(long when) +{ + zx_time_t delta_ms; + switch (when) { + case 0: + delta_ms = 5; + case 1: + delta_ms = 30; + default: + delta_ms = 10000; + } + zx_time_t now = zx_time_get(ZX_CLOCK_MONOTONIC); + return now + delta_ms * 1000 * 1000; +} +#endif + +#if defined(SYZ_EXECUTOR) || defined(__NR_zx_channel_call_finish) || defined(zx_channel_call_noretry) +#include "kernel/lib/vdso/vdso-code.h" +#define UNEXPORTED(name) ((syscall_t)((long)&zx_handle_close - VDSO_SYSCALL_zx_handle_close + VDSO_SYSCALL_##name)) +#endif + +#if defined(SYZ_EXECUTOR) || defined(__NR_zx_channel_call_finish) +zx_status_t zx_channel_call_finish(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8) +{ + return UNEXPORTED(zx_channel_call_finish)(a0, a1, a2, a3, a4, a5, a6, a7, a8); +} +#endif + +#if defined(SYZ_EXECUTOR) || defined(__NR_zx_channel_call_noretry) +zx_status_t zx_channel_call_noretry(long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8) +{ + return UNEXPORTED(zx_channel_call_noretry)(a0, a1, a2, a3, a4, a5, a6, a7, a8); +} +#endif diff --git a/executor/executor_fuchsia.cc b/executor/executor_fuchsia.cc index b01bf5880..490ec551c 100644 --- a/executor/executor_fuchsia.cc +++ b/executor/executor_fuchsia.cc @@ -30,7 +30,8 @@ int main(int argc, char** argv) long execute_syscall(call_t* c, long a0, long a1, long a2, long a3, long a4, long a5, long a6, long a7, long a8) { - long res = c->call(a0, a1, a2, a3, a4, a5, a6, a7, a8); + long res = ZX_ERR_INVALID_ARGS; + NONFAILING(res = c->call(a0, a1, a2, a3, a4, a5, a6, a7, a8)); errno = res; return res; } diff --git a/executor/syscalls_fuchsia.h b/executor/syscalls_fuchsia.h index 1b01edef1..fb04855de 100644 --- a/executor/syscalls_fuchsia.h +++ b/executor/syscalls_fuchsia.h @@ -2,21 +2,82 @@ #if defined(__x86_64__) || 0 #define GOARCH "amd64" -#define SYZ_REVISION "c4bd217e1073de2f960be149f5f3763258a9f8ea" -#define __NR_syz_job_default 1000000 -#define __NR_syz_mmap 1000001 -#define __NR_syz_process_self 1000002 -#define __NR_syz_thread_self 1000003 -#define __NR_syz_vmar_root_self 1000004 +#define SYZ_REVISION "5a8e70818b54cb32826aacef1b4b176d34b5c768" +#define __NR_syz_future_time 1000000 +#define __NR_syz_job_default 1000001 +#define __NR_syz_mmap 1000002 +#define __NR_syz_process_self 1000003 +#define __NR_syz_thread_self 1000004 +#define __NR_syz_vmar_root_self 1000005 -unsigned syscall_count = 103; +unsigned syscall_count = 164; call_t syscalls[] = { - {"syz_job_default", 1000000, (syscall_t)syz_job_default}, - {"syz_mmap", 1000001, (syscall_t)syz_mmap}, - {"syz_process_self", 1000002, (syscall_t)syz_process_self}, - {"syz_thread_self", 1000003, (syscall_t)syz_thread_self}, - {"syz_vmar_root_self", 1000004, (syscall_t)syz_vmar_root_self}, + {"chdir", 0, (syscall_t)chdir}, + {"chmod", 0, (syscall_t)chmod}, + {"chown", 0, (syscall_t)chown}, + {"close", 0, (syscall_t)close}, + {"creat", 0, (syscall_t)creat}, + {"dup", 0, (syscall_t)dup}, + {"dup2", 0, (syscall_t)dup2}, + {"dup3", 0, (syscall_t)dup3}, + {"faccessat", 0, (syscall_t)faccessat}, + {"fchdir", 0, (syscall_t)fchdir}, + {"fchmod", 0, (syscall_t)fchmod}, + {"fchmodat", 0, (syscall_t)fchmodat}, + {"fchown", 0, (syscall_t)fchown}, + {"fchownat", 0, (syscall_t)fchownat}, + {"fdatasync", 0, (syscall_t)fdatasync}, + {"flock", 0, (syscall_t)flock}, + {"fstat", 0, (syscall_t)fstat}, + {"fsync", 0, (syscall_t)fsync}, + {"ftruncate", 0, (syscall_t)ftruncate}, + {"futimesat", 0, (syscall_t)futimesat}, + {"getcwd", 0, (syscall_t)getcwd}, + {"getgid", 0, (syscall_t)getgid}, + {"getpid", 0, (syscall_t)getpid}, + {"getuid", 0, (syscall_t)getuid}, + {"lchown", 0, (syscall_t)lchown}, + {"link", 0, (syscall_t)link}, + {"linkat", 0, (syscall_t)linkat}, + {"lseek", 0, (syscall_t)lseek}, + {"lstat", 0, (syscall_t)lstat}, + {"mkdir", 0, (syscall_t)mkdir}, + {"mkdirat", 0, (syscall_t)mkdirat}, + {"open", 0, (syscall_t)open}, + {"openat", 0, (syscall_t)openat}, + {"poll", 0, (syscall_t)poll}, + {"ppoll", 0, (syscall_t)ppoll}, + {"preadv", 0, (syscall_t)preadv}, + {"pwritev", 0, (syscall_t)pwritev}, + {"read", 0, (syscall_t)read}, + {"readlink", 0, (syscall_t)readlink}, + {"readlinkat", 0, (syscall_t)readlinkat}, + {"readv", 0, (syscall_t)readv}, + {"rename", 0, (syscall_t)rename}, + {"renameat", 0, (syscall_t)renameat}, + {"rmdir", 0, (syscall_t)rmdir}, + {"select", 0, (syscall_t)select}, + {"stat", 0, (syscall_t)stat}, + {"symlink", 0, (syscall_t)symlink}, + {"symlinkat", 0, (syscall_t)symlinkat}, + {"sync", 0, (syscall_t)sync}, + {"syz_future_time", 1000000, (syscall_t)syz_future_time}, + {"syz_job_default", 1000001, (syscall_t)syz_job_default}, + {"syz_mmap", 1000002, (syscall_t)syz_mmap}, + {"syz_process_self", 1000003, (syscall_t)syz_process_self}, + {"syz_thread_self", 1000004, (syscall_t)syz_thread_self}, + {"syz_vmar_root_self", 1000005, (syscall_t)syz_vmar_root_self}, + {"truncate", 0, (syscall_t)truncate}, + {"unlink", 0, (syscall_t)unlink}, + {"unlinkat", 0, (syscall_t)unlinkat}, + {"utime", 0, (syscall_t)utime}, + {"utimensat", 0, (syscall_t)utimensat}, + {"utimes", 0, (syscall_t)utimes}, + {"write", 0, (syscall_t)write}, + {"writev", 0, (syscall_t)writev}, {"zx_channel_call", 0, (syscall_t)zx_channel_call}, + {"zx_channel_call_finish", 0, (syscall_t)zx_channel_call_finish}, + {"zx_channel_call_noretry", 0, (syscall_t)zx_channel_call_noretry}, {"zx_channel_create", 0, (syscall_t)zx_channel_create}, {"zx_channel_read", 0, (syscall_t)zx_channel_read}, {"zx_channel_write", 0, (syscall_t)zx_channel_write}, @@ -112,6 +173,7 @@ call_t syscalls[] = { {"zx_vmo_op_range$ZX_VMO_OP_DECOMMIT", 0, (syscall_t)zx_vmo_op_range}, {"zx_vmo_op_range$ZX_VMO_OP_LOOKUP", 0, (syscall_t)zx_vmo_op_range}, {"zx_vmo_read", 0, (syscall_t)zx_vmo_read}, + {"zx_vmo_set_cache_policy", 0, (syscall_t)zx_vmo_set_cache_policy}, {"zx_vmo_set_size", 0, (syscall_t)zx_vmo_set_size}, {"zx_vmo_write", 0, (syscall_t)zx_vmo_write}, @@ -120,21 +182,82 @@ call_t syscalls[] = { #if defined(__aarch64__) || 0 #define GOARCH "arm64" -#define SYZ_REVISION "74d9a48364f654cbf79562ea1efc049b48db9a72" -#define __NR_syz_job_default 1000000 -#define __NR_syz_mmap 1000001 -#define __NR_syz_process_self 1000002 -#define __NR_syz_thread_self 1000003 -#define __NR_syz_vmar_root_self 1000004 +#define SYZ_REVISION "181d2b70232bd5b7de2d6d08ad038157ec35803f" +#define __NR_syz_future_time 1000000 +#define __NR_syz_job_default 1000001 +#define __NR_syz_mmap 1000002 +#define __NR_syz_process_self 1000003 +#define __NR_syz_thread_self 1000004 +#define __NR_syz_vmar_root_self 1000005 -unsigned syscall_count = 103; +unsigned syscall_count = 164; call_t syscalls[] = { - {"syz_job_default", 1000000, (syscall_t)syz_job_default}, - {"syz_mmap", 1000001, (syscall_t)syz_mmap}, - {"syz_process_self", 1000002, (syscall_t)syz_process_self}, - {"syz_thread_self", 1000003, (syscall_t)syz_thread_self}, - {"syz_vmar_root_self", 1000004, (syscall_t)syz_vmar_root_self}, + {"chdir", 0, (syscall_t)chdir}, + {"chmod", 0, (syscall_t)chmod}, + {"chown", 0, (syscall_t)chown}, + {"close", 0, (syscall_t)close}, + {"creat", 0, (syscall_t)creat}, + {"dup", 0, (syscall_t)dup}, + {"dup2", 0, (syscall_t)dup2}, + {"dup3", 0, (syscall_t)dup3}, + {"faccessat", 0, (syscall_t)faccessat}, + {"fchdir", 0, (syscall_t)fchdir}, + {"fchmod", 0, (syscall_t)fchmod}, + {"fchmodat", 0, (syscall_t)fchmodat}, + {"fchown", 0, (syscall_t)fchown}, + {"fchownat", 0, (syscall_t)fchownat}, + {"fdatasync", 0, (syscall_t)fdatasync}, + {"flock", 0, (syscall_t)flock}, + {"fstat", 0, (syscall_t)fstat}, + {"fsync", 0, (syscall_t)fsync}, + {"ftruncate", 0, (syscall_t)ftruncate}, + {"futimesat", 0, (syscall_t)futimesat}, + {"getcwd", 0, (syscall_t)getcwd}, + {"getgid", 0, (syscall_t)getgid}, + {"getpid", 0, (syscall_t)getpid}, + {"getuid", 0, (syscall_t)getuid}, + {"lchown", 0, (syscall_t)lchown}, + {"link", 0, (syscall_t)link}, + {"linkat", 0, (syscall_t)linkat}, + {"lseek", 0, (syscall_t)lseek}, + {"lstat", 0, (syscall_t)lstat}, + {"mkdir", 0, (syscall_t)mkdir}, + {"mkdirat", 0, (syscall_t)mkdirat}, + {"open", 0, (syscall_t)open}, + {"openat", 0, (syscall_t)openat}, + {"poll", 0, (syscall_t)poll}, + {"ppoll", 0, (syscall_t)ppoll}, + {"preadv", 0, (syscall_t)preadv}, + {"pwritev", 0, (syscall_t)pwritev}, + {"read", 0, (syscall_t)read}, + {"readlink", 0, (syscall_t)readlink}, + {"readlinkat", 0, (syscall_t)readlinkat}, + {"readv", 0, (syscall_t)readv}, + {"rename", 0, (syscall_t)rename}, + {"renameat", 0, (syscall_t)renameat}, + {"rmdir", 0, (syscall_t)rmdir}, + {"select", 0, (syscall_t)select}, + {"stat", 0, (syscall_t)stat}, + {"symlink", 0, (syscall_t)symlink}, + {"symlinkat", 0, (syscall_t)symlinkat}, + {"sync", 0, (syscall_t)sync}, + {"syz_future_time", 1000000, (syscall_t)syz_future_time}, + {"syz_job_default", 1000001, (syscall_t)syz_job_default}, + {"syz_mmap", 1000002, (syscall_t)syz_mmap}, + {"syz_process_self", 1000003, (syscall_t)syz_process_self}, + {"syz_thread_self", 1000004, (syscall_t)syz_thread_self}, + {"syz_vmar_root_self", 1000005, (syscall_t)syz_vmar_root_self}, + {"truncate", 0, (syscall_t)truncate}, + {"unlink", 0, (syscall_t)unlink}, + {"unlinkat", 0, (syscall_t)unlinkat}, + {"utime", 0, (syscall_t)utime}, + {"utimensat", 0, (syscall_t)utimensat}, + {"utimes", 0, (syscall_t)utimes}, + {"write", 0, (syscall_t)write}, + {"writev", 0, (syscall_t)writev}, {"zx_channel_call", 0, (syscall_t)zx_channel_call}, + {"zx_channel_call_finish", 0, (syscall_t)zx_channel_call_finish}, + {"zx_channel_call_noretry", 0, (syscall_t)zx_channel_call_noretry}, {"zx_channel_create", 0, (syscall_t)zx_channel_create}, {"zx_channel_read", 0, (syscall_t)zx_channel_read}, {"zx_channel_write", 0, (syscall_t)zx_channel_write}, @@ -230,6 +353,7 @@ call_t syscalls[] = { {"zx_vmo_op_range$ZX_VMO_OP_DECOMMIT", 0, (syscall_t)zx_vmo_op_range}, {"zx_vmo_op_range$ZX_VMO_OP_LOOKUP", 0, (syscall_t)zx_vmo_op_range}, {"zx_vmo_read", 0, (syscall_t)zx_vmo_read}, + {"zx_vmo_set_cache_policy", 0, (syscall_t)zx_vmo_set_cache_policy}, {"zx_vmo_set_size", 0, (syscall_t)zx_vmo_set_size}, {"zx_vmo_write", 0, (syscall_t)zx_vmo_write}, -- cgit mrf-deployment