diff --git a/proto/region/vmxon_reg.c b/proto/region/vmxon_reg.c
index 6d5255581964713051f5b162261ebc57e69dae9b..1f568ac47505d2a4be58018c9b5fd60eae3e6215 100644
--- a/proto/region/vmxon_reg.c
+++ b/proto/region/vmxon_reg.c
@@ -29,7 +29,7 @@ static int alloc_vmxon_internals(struct vmxon_region_t *reg) {
 
     reg->size = REGION_SIZE;
     reg->va = region;
-    reg->pa = (void *)__pa(region);
+    reg->pa = __pa(region);
 
     return 0;
 }
@@ -41,12 +41,13 @@ static int write_vmcs_rev_id_to_vmxon(struct vmxon_region_t *reg) {
     }
 
     DEBUG_FMT(
-        "Reading IA32_VMX_BASIC MSR for VMCS revision identifier = %llu\n",
+        "Reading IA32_VMX_BASIC MSR for VMCS revision identifier = 0x%llx\n",
         VMCS_REVISION_ID);
 
     DEBUG_FMT("Writing VMCS Revision ID to VMXON region\n");
 
-    (*(uint32_t *)reg->va) = VMCS_REVISION_ID;
+    (*(unsigned long *)reg->va) = VMCS_REVISION_ID;
+    (*(unsigned long *)reg->va) &= ~(1UL << 31);
 
     return 0;
 }
@@ -57,6 +58,7 @@ int init_vmxon_reg(struct vmxon_region_t *reg) {
     }
 
     if (write_vmcs_rev_id_to_vmxon(reg) != 0) {
+        kfree(reg->va);
         return -1;
     }
 
diff --git a/proto/region/vxmon_reg.h b/proto/region/vxmon_reg.h
index 8e0f70fc87e8ea2783a4525c9afb7d459fd48865..e080b028ea6c1584f929382b353e8e3d12e85e62 100644
--- a/proto/region/vxmon_reg.h
+++ b/proto/region/vxmon_reg.h
@@ -3,7 +3,7 @@
 struct vmxon_region_t {
     unsigned long size;
     void *va;
-    void *pa;
+    unsigned long long pa;
 };
 
 int init_vmxon_reg(struct vmxon_region_t *reg);