diff dyncallback/dyncall_callback_arm64.c @ 202:030fbb70aa1b

- changed allocwx code: * to introduce a call allowing to switch the written page to be executable (e.g. using mprotect) * changed mmap based code so page is always W^X
author Tassilo Philipp
date Mon, 20 Mar 2017 23:12:58 +0100
parents d48a8b8d2ef9
children f5577f6bf97a
line wrap: on
line diff
--- a/dyncallback/dyncall_callback_arm64.c	Sun Mar 19 20:26:01 2017 +0100
+++ b/dyncallback/dyncall_callback_arm64.c	Mon Mar 20 23:12:58 2017 +0100
@@ -50,10 +50,18 @@
   int err;
   DCCallback* pcb;
   err = dcAllocWX(sizeof(DCCallback), (void**) &pcb);
-  if (err != 0) return 0;
+  if(err)
+    return NULL;
 
   dcbInitThunk(&pcb->thunk, dcCallbackThunkEntry);
   dcbInitCallback(pcb, signature, handler, userdata);
+
+  err = dcInitExecWX(pcb, sizeof(DCCallback));
+  if(err) {
+    dcFreeWX(pcb, sizeof(DCCallback));
+    return NULL;
+  }
+
   return pcb;
 }