diff options
Diffstat (limited to 'executor')
| -rw-r--r-- | executor/common_fuchsia.h | 35 | ||||
| -rw-r--r-- | executor/executor_fuchsia.h | 3 |
2 files changed, 17 insertions, 21 deletions
diff --git a/executor/common_fuchsia.h b/executor/common_fuchsia.h index b537705e4..f8fa8ffec 100644 --- a/executor/common_fuchsia.h +++ b/executor/common_fuchsia.h @@ -19,6 +19,7 @@ #include <unistd.h> #include <utime.h> #include <zircon/process.h> +#include <zircon/status.h> #include <zircon/syscalls.h> #if SYZ_EXECUTOR || __NR_get_root_resource @@ -50,7 +51,7 @@ static zx_status_t update_exception_thread_regs(zx_handle_t exception) zx_handle_t thread; zx_status_t status = zx_exception_get_thread(exception, &thread); if (status != ZX_OK) { - debug("zx_exception_get_thread failed: %d\n", status); + debug("zx_exception_get_thread failed: %s (%d)\n", zx_status_get_string(status), status); return status; } @@ -58,8 +59,8 @@ static zx_status_t update_exception_thread_regs(zx_handle_t exception) status = zx_thread_read_state(thread, ZX_THREAD_STATE_GENERAL_REGS, ®s, sizeof(regs)); if (status != ZX_OK) { - debug("zx_thread_read_state failed: %d (%d)\n", - (int)sizeof(regs), status); + debug("zx_thread_read_state failed: %d %s (%d)\n", + (int)sizeof(regs), zx_status_get_string(status), status); } else { #if GOARCH_amd64 regs.rip = (uint64)(void*)&segv_handler; @@ -70,7 +71,7 @@ static zx_status_t update_exception_thread_regs(zx_handle_t exception) #endif status = zx_thread_write_state(thread, ZX_THREAD_STATE_GENERAL_REGS, ®s, sizeof(regs)); if (status != ZX_OK) { - debug("zx_thread_write_state failed: %d\n", status); + debug("zx_thread_write_state failed: %s (%d)\n", zx_status_get_string(status), status); } } @@ -84,7 +85,7 @@ static void* ex_handler(void* arg) for (int i = 0; i < 10000; i++) { zx_status_t status = zx_object_wait_one(exception_channel, ZX_CHANNEL_READABLE, ZX_TIME_INFINITE, NULL); if (status != ZX_OK) { - debug("zx_object_wait_one failed: %d\n", status); + debug("zx_object_wait_one failed: %s (%d)\n", zx_status_get_string(status), status); continue; } @@ -92,20 +93,20 @@ static void* ex_handler(void* arg) zx_handle_t exception; status = zx_channel_read(exception_channel, 0, &info, &exception, sizeof(info), 1, NULL, NULL); if (status != ZX_OK) { - debug("zx_channel_read failed: %d\n", status); + debug("zx_channel_read failed: %s (%d)\n", zx_status_get_string(status), status); continue; } debug("got exception: type=%d tid=%llu\n", info.type, (unsigned long long)(info.tid)); status = update_exception_thread_regs(exception); if (status != ZX_OK) { - debug("failed to update exception thread registers: %d\n", status); + debug("failed to update exception thread registers: %s (%d)\n", zx_status_get_string(status), status); } uint32 state = ZX_EXCEPTION_STATE_HANDLED; status = zx_object_set_property(exception, ZX_PROP_EXCEPTION_STATE, &state, sizeof(state)); if (status != ZX_OK) { - debug("zx_object_set_property(ZX_PROP_EXCEPTION_STATE) failed: %d\n", status); + debug("zx_object_set_property(ZX_PROP_EXCEPTION_STATE) failed: %s (%d)\n", zx_status_get_string(status), status); } zx_handle_close(exception); } @@ -118,7 +119,7 @@ static void install_segv_handler(void) zx_status_t status; zx_handle_t exception_channel; if ((status = zx_task_create_exception_channel(zx_process_self(), 0, &exception_channel)) != ZX_OK) - fail("zx_task_create_exception_channel failed: %d", status); + fail("zx_task_create_exception_channel failed: %s (%d)", zx_status_get_string(status), status); pthread_t th; if (pthread_create(&th, 0, ex_handler, (void*)(long)exception_channel)) fail("pthread_create failed"); @@ -190,30 +191,24 @@ long syz_mmap(size_t addr, size_t size) zx_info_vmar_t info; zx_status_t status = zx_object_get_info(root, ZX_INFO_VMAR, &info, sizeof(info), 0, 0); if (status != ZX_OK) { - debug("zx_object_get_info(ZX_INFO_VMAR) failed: %d", status); + debug("zx_object_get_info(ZX_INFO_VMAR) failed: %s (%d)", zx_status_get_string(status), status); return status; } zx_handle_t vmo; status = zx_vmo_create(size, 0, &vmo); if (status != ZX_OK) { - debug("zx_vmo_create failed with: %d\n", status); - return status; - } - status = zx_vmo_replace_as_executable(vmo, ZX_HANDLE_INVALID, &vmo); - if (status != ZX_OK) { - debug("zx_vmo_replace_as_executable failed with: %d\n", status); - // Don't need to zx_handle_close(vmo) because - // zx_vmo_replace_as_executable already invalidates it. + debug("zx_vmo_create failed: %s (%d)\n", zx_status_get_string(status), status); return status; } + uintptr_t mapped_addr; - status = zx_vmar_map(root, ZX_VM_FLAG_SPECIFIC_OVERWRITE | ZX_VM_FLAG_PERM_READ | ZX_VM_FLAG_PERM_WRITE | ZX_VM_FLAG_PERM_EXECUTE, + status = zx_vmar_map(root, ZX_VM_FLAG_SPECIFIC_OVERWRITE | ZX_VM_FLAG_PERM_READ | ZX_VM_FLAG_PERM_WRITE, addr - info.base, vmo, 0, size, &mapped_addr); zx_status_t close_vmo_status = zx_handle_close(vmo); if (close_vmo_status != ZX_OK) { - debug("zx_handle_close(vmo) failed with: %d\n", close_vmo_status); + debug("zx_handle_close(vmo) failed with: %s (%d)\n", zx_status_get_string(close_vmo_status), close_vmo_status); } return status; } diff --git a/executor/executor_fuchsia.h b/executor/executor_fuchsia.h index 75c1d1802..84ebac44d 100644 --- a/executor/executor_fuchsia.h +++ b/executor/executor_fuchsia.h @@ -6,6 +6,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <zircon/status.h> #include <zircon/syscalls.h> #include "nocover.h" @@ -14,7 +15,7 @@ static void os_init(int argc, char** argv, void* data, size_t data_size) { zx_status_t status = syz_mmap((size_t)data, data_size); if (status != ZX_OK) - fail("mmap of data segment failed with: %d", status); + fail("mmap of data segment failed: %s (%d)", zx_status_get_string(status), status); } static intptr_t execute_syscall(const call_t* c, intptr_t a[kMaxArgs]) |
