Skip to content
Snippets Groups Projects
Commit 7ecd8f1a authored by iliya.saroukha's avatar iliya.saroukha :first_quarter_moon:
Browse files

fix: renamed vmxon struct

parent 9b15b8cd
Branches
No related tags found
No related merge requests found
#include "../debug/debug.h"
#include "../msr/msr.h"
#include "vxmon.h"
#include <asm/page.h>
#include <linux/errno.h>
#include <linux/printk.h>
#include <linux/slab.h>
struct vmxon_t *alloc_vmxon(void) {
struct vmxon_t *vmxon = kzalloc(sizeof(struct vmxon_t), GFP_KERNEL);
if (!vmxon) {
DEBUG_FMT("VMXON region allocation has failed\n");
return NULL;
}
vmxon->header.vmcs_rev_id = VMCS_REVISION_ID;
vmxon->header.shadow_vmcs = 0;
return vmxon;
}
#include "../debug/debug.h"
#include "../msr/msr.h"
#include "vxmon_reg.h"
#include <asm/page.h>
#include <linux/errno.h>
#include <linux/printk.h>
#include <linux/slab.h>
static int alloc_vmxon_internals(struct vmxon_region_t *reg) {
if (!reg) {
DEBUG_FMT("vmxon_reg_t isn't allocated\n");
return -EFAULT;
}
void *region = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!region) {
DEBUG_FMT("VMXON region allocation has failed\n");
return -EFAULT;
}
if (((unsigned long long)region & 0xfff) != 0) {
DEBUG_FMT("Region 0x%px isn't properly aligned\n", region);
return -EFAULT;
}
DEBUG_FMT(
"Reading IA32_VMX_BASIC MSR for allocation size (in bytes) = %llu \n",
REGION_SIZE);
reg->size = REGION_SIZE;
reg->va = region;
reg->pa = __pa(region);
return 0;
}
static int write_vmcs_rev_id_to_vmxon(struct vmxon_region_t *reg) {
if (!reg) {
DEBUG_FMT("vmxon_reg_t isn't allocated\n");
return -EFAULT;
}
DEBUG_FMT(
"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");
(*(unsigned long *)reg->va) = VMCS_REVISION_ID;
(*(unsigned long *)reg->va) &= ~(1UL << 31);
return 0;
}
int init_vmxon_reg(struct vmxon_region_t *reg) {
int ret;
if ((ret = alloc_vmxon_internals(reg)) != 0) {
return ret;
}
if ((ret = write_vmcs_rev_id_to_vmxon(reg)) != 0) {
kfree(reg->va);
return ret;
}
return 0;
}
#pragma once
struct vmxon_t {
struct {
unsigned long vmcs_rev_id : 31;
unsigned long shadow_vmcs : 1;
} header;
char state[0x1000 - sizeof(unsigned long)];
};
struct vmxon_t *alloc_vmxon(void);
#pragma once
struct vmxon_region_t {
unsigned long size;
void *va;
unsigned long long pa;
};
int init_vmxon_reg(struct vmxon_region_t *reg);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment