Skip to content

Commit

Permalink
executor: update syntax for making W+X fuchsia memory
Browse files Browse the repository at this point in the history
Fuchsia recently changed such that zx_vmar_map can't be declared
executable and writeable at the same time; use a new syscall for this
purpose.

Also made a few errors more informative.
  • Loading branch information
flowerhack authored and dvyukov committed Feb 27, 2019
1 parent f2468c1 commit 083cfd0
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 4 deletions.
6 changes: 5 additions & 1 deletion executor/common_fuchsia.h
Expand Up @@ -176,12 +176,16 @@ long syz_mmap(size_t addr, size_t size)
fail("zx_object_get_info(ZX_INFO_VMAR) failed: %d", status);
zx_handle_t vmo;
status = zx_vmo_create(size, 0, &vmo);
if (status != ZX_OK) {
debug("zx_vmo_create failed with: %d", status);
return status;
}
status = zx_vmo_replace_as_executable(vmo, ZX_HANDLE_INVALID, &vmo);
if (status != ZX_OK)
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,
addr - info.base, vmo, 0, size,

&mapped_addr);
return status;
}
Expand Down
5 changes: 3 additions & 2 deletions executor/executor_fuchsia.h
Expand Up @@ -12,8 +12,9 @@

static void os_init(int argc, char** argv, void* data, size_t data_size)
{
if (syz_mmap((size_t)data, data_size) != ZX_OK)
fail("mmap of data segment failed");
zx_status_t status = syz_mmap((size_t)data, data_size);
if (status != ZX_OK)
fail("mmap of data segment failed with: %d", status);
}

static long execute_syscall(const call_t* c, long a[kMaxArgs])
Expand Down
6 changes: 5 additions & 1 deletion pkg/csource/generated.go
Expand Up @@ -912,12 +912,16 @@ long syz_mmap(size_t addr, size_t size)
fail("zx_object_get_info(ZX_INFO_VMAR) failed: %d", status);
zx_handle_t vmo;
status = zx_vmo_create(size, 0, &vmo);
if (status != ZX_OK) {
debug("zx_vmo_create failed with: %d", status);
return status;
}
status = zx_vmo_replace_as_executable(vmo, ZX_HANDLE_INVALID, &vmo);
if (status != ZX_OK)
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,
addr - info.base, vmo, 0, size,
&mapped_addr);
return status;
}
Expand Down

0 comments on commit 083cfd0

Please sign in to comment.