aboutsummaryrefslogtreecommitdiffstats
path: root/executor/common_fuchsia.h
diff options
context:
space:
mode:
Diffstat (limited to 'executor/common_fuchsia.h')
-rw-r--r--executor/common_fuchsia.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/executor/common_fuchsia.h b/executor/common_fuchsia.h
index 1621e284b..092734d66 100644
--- a/executor/common_fuchsia.h
+++ b/executor/common_fuchsia.h
@@ -151,13 +151,15 @@ long syz_mmap(size_t addr, size_t size)
zx_status_t status = zx_object_get_info(root, ZX_INFO_VMAR, &info, sizeof(info), 0, 0);
if (status != ZX_OK)
error("zx_object_get_info(ZX_INFO_VMAR) failed: %d", status);
- uintptr_t res = 0;
- zx_handle_t mapping = 0;
- status = zx_vmar_allocate(root, addr - info.base, size,
- ZX_VM_FLAG_SPECIFIC | ZX_VM_FLAG_CAN_MAP_READ | ZX_VM_FLAG_CAN_MAP_WRITE,
- &mapping, &res);
- if (status == ZX_OK && addr != res)
- error("zx_vmar_allocate allocated wrong address: %p, want %p", (void*)res, (void*)addr);
+ zx_handle_t vmo;
+ status = zx_vmo_create(size, 0, &vmo);
+ if (status != ZX_OK)
+ return status;
+ uintptr_t mapped_addr;
+ status = zx_vmar_map(root, addr - info.base, vmo, 0, size,
+ ZX_VM_FLAG_SPECIFIC_OVERWRITE | ZX_VM_FLAG_PERM_READ |
+ ZX_VM_FLAG_PERM_WRITE | ZX_VM_FLAG_PERM_EXECUTE,
+ &mapped_addr);
return status;
}
#endif