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);