KVM: x86: Assertions to check no overrun in MSR lists
authorNadav Amit <namit@cs.technion.ac.il>
Thu, 24 Jul 2014 12:06:56 +0000 (15:06 +0300)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 24 Jul 2014 12:16:57 +0000 (14:16 +0200)
Currently there is no check whether shared MSRs list overrun the allocated size
which can results in bugs. In addition there is no check that vmx->guest_msrs
has sufficient space to accommodate all the VMX msrs.  This patch adds the
assertions.

Signed-off-by: Nadav Amit <namit@cs.technion.ac.il>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/vmx.c
arch/x86/kvm/x86.c

index fd24f68..3397a88 100644 (file)
@@ -7608,6 +7608,8 @@ static struct kvm_vcpu *vmx_create_vcpu(struct kvm *kvm, unsigned int id)
                goto free_vcpu;
 
        vmx->guest_msrs = kmalloc(PAGE_SIZE, GFP_KERNEL);
+       BUILD_BUG_ON(PAGE_SIZE / sizeof(struct shared_msr_entry) < NR_VMX_MSR);
+
        err = -ENOMEM;
        if (!vmx->guest_msrs) {
                goto uninit_vcpu;
index 439f96b..d38abc8 100644 (file)
@@ -212,6 +212,7 @@ static void shared_msr_update(unsigned slot, u32 msr)
 
 void kvm_define_shared_msr(unsigned slot, u32 msr)
 {
+       BUG_ON(slot >= KVM_NR_SHARED_MSRS);
        if (slot >= shared_msrs_global.nr)
                shared_msrs_global.nr = slot + 1;
        shared_msrs_global.msrs[slot] = msr;