diff --git a/proto/hypervisor.c b/proto/hypervisor.c
index 5061d4853c985e72f3fadf5d098d9c46f093ab24..4f630e5c3fab159a513ad0b6110ea46d0a6d209a 100755
--- a/proto/hypervisor.c
+++ b/proto/hypervisor.c
@@ -22,6 +22,9 @@
 // regions
 #define IA32_VMX_BASIC (0x480)
 
+#define VMCS_REVISION_ID (__rdmsr(IA32_VMX_BASIC) & 0x7fffffff)
+#define REGION_SIZE ((__rdmsr(IA32_VMX_BASIC) >> 32) & 0x1fff)
+
 // Appendix 8 p. 4'592 of Intel SDM
 #define IA32_VMX_CR0_FIXED0 (0x486)
 #define IA32_VMX_CR0_FIXED1 (0x487)
@@ -158,7 +161,7 @@ static int my_init(void) {
 
     printk(KERN_INFO "Allocating memory for VMXON region\n");
 
-    if (!vmxon_region_alloc()) {
+    if (vmxon_region_alloc() != 0) {
         pr_err("Failed to allocated memory for the VMXON region\n");
         return -1;
     }
@@ -174,7 +177,10 @@ static int my_init(void) {
     unsigned long long vmx_basic_msr = __rdmsr(IA32_VMX_BASIC);
     pr_debug("IA32_VMX_BASIC_MSR = 0x%llx\n", vmx_basic_msr);
 
-    unsigned long vmcs_revision_id = vmx_basic_msr & 0x7fffffff;
+    unsigned long size_to_alloc = REGION_SIZE;
+    pr_debug("Region size to allocate = 0x%lx\n", size_to_alloc);
+
+    unsigned long vmcs_revision_id = VMCS_REVISION_ID;
     pr_debug("VMCS revision identifier = 0x%lx\n", vmcs_revision_id);
 
     return 0;