From e88b6b876adb6972a64ccf7e988d640940cdb112 Mon Sep 17 00:00:00 2001
From: "iliya.saroukha" <iliya.saroukhanian@etu.hesge.ch>
Date: Tue, 10 Dec 2024 13:43:17 +0100
Subject: [PATCH] debug: trying to a find the reason why vmxon raises the carry
 flag

---
 proto/region/vmxon_reg.c | 8 +++++---
 proto/region/vxmon_reg.h | 2 +-
 2 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/proto/region/vmxon_reg.c b/proto/region/vmxon_reg.c
index 6d52555..1f568ac 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 8e0f70f..e080b02 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);
-- 
GitLab