Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mach_override.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Beer <ian.beer@chromium.org>2013-11-25 15:31:55 +0400
committerIan Beer <ian.beer@chromium.org>2013-11-25 15:31:55 +0400
commit1425e9621234316fe35f84c1668fb94c9ee32a73 (patch)
tree46f4498d5cbe664ba44b54ccfe0a6790264dea39
parent1a1bb35291a915c545842cd64b5e12e1e76883fc (diff)
remove PROT_WRITE from islands and hooked functions
-rw-r--r--mach_override.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/mach_override.c b/mach_override.c
index a2fe80b..4a41efa 100644
--- a/mach_override.c
+++ b/mach_override.c
@@ -163,7 +163,7 @@ mach_error_t makeIslandExecutable(void *address) {
host_page_size( mach_host_self(), &pageSize );
uintptr_t page = (uintptr_t)address & ~(uintptr_t)(pageSize-1);
int e = err_none;
- e |= mprotect((void *)page, pageSize, PROT_EXEC | PROT_READ | PROT_WRITE);
+ e |= mprotect((void *)page, pageSize, PROT_EXEC | PROT_READ);
e |= msync((void *)page, pageSize, MS_INVALIDATE );
if (e) {
err = err_cannot_override;
@@ -342,6 +342,11 @@ mach_override_ptr(
#endif
if ( !err )
atomic_mov64((uint64_t *)originalFunctionPtr, jumpRelativeInstruction);
+ mach_error_t prot_err = err_none;
+ prot_err = vm_protect( mach_task_self(),
+ (vm_address_t) originalFunctionPtr, 8, false,
+ (VM_PROT_READ | VM_PROT_EXECUTE) );
+ if(prot_err) fprintf(stderr, "err = %x %s:%d\n", prot_err, __FILE__, __LINE__);
}
#endif