KVM: VMX: free vpid when fail to create vcpu
Fix bug of the exception path, free allocated vpid when fail to create vcpu. Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
b83d4a9cfc
commit
cdbecfc398
1 changed files with 12 additions and 4 deletions
|
@ -2333,6 +2333,16 @@ static void allocate_vpid(struct vcpu_vmx *vmx)
|
||||||
spin_unlock(&vmx_vpid_lock);
|
spin_unlock(&vmx_vpid_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void free_vpid(struct vcpu_vmx *vmx)
|
||||||
|
{
|
||||||
|
if (!enable_vpid)
|
||||||
|
return;
|
||||||
|
spin_lock(&vmx_vpid_lock);
|
||||||
|
if (vmx->vpid != 0)
|
||||||
|
__clear_bit(vmx->vpid, vmx_vpid_bitmap);
|
||||||
|
spin_unlock(&vmx_vpid_lock);
|
||||||
|
}
|
||||||
|
|
||||||
static void __vmx_disable_intercept_for_msr(unsigned long *msr_bitmap, u32 msr)
|
static void __vmx_disable_intercept_for_msr(unsigned long *msr_bitmap, u32 msr)
|
||||||
{
|
{
|
||||||
int f = sizeof(unsigned long);
|
int f = sizeof(unsigned long);
|
||||||
|
@ -3916,10 +3926,7 @@ static void vmx_free_vcpu(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||||
|
|
||||||
spin_lock(&vmx_vpid_lock);
|
free_vpid(vmx);
|
||||||
if (vmx->vpid != 0)
|
|
||||||
__clear_bit(vmx->vpid, vmx_vpid_bitmap);
|
|
||||||
spin_unlock(&vmx_vpid_lock);
|
|
||||||
vmx_free_vmcs(vcpu);
|
vmx_free_vmcs(vcpu);
|
||||||
kfree(vmx->guest_msrs);
|
kfree(vmx->guest_msrs);
|
||||||
kvm_vcpu_uninit(vcpu);
|
kvm_vcpu_uninit(vcpu);
|
||||||
|
@ -3981,6 +3988,7 @@ static struct kvm_vcpu *vmx_create_vcpu(struct kvm *kvm, unsigned int id)
|
||||||
uninit_vcpu:
|
uninit_vcpu:
|
||||||
kvm_vcpu_uninit(&vmx->vcpu);
|
kvm_vcpu_uninit(&vmx->vcpu);
|
||||||
free_vcpu:
|
free_vcpu:
|
||||||
|
free_vpid(vmx);
|
||||||
kmem_cache_free(kvm_vcpu_cache, vmx);
|
kmem_cache_free(kvm_vcpu_cache, vmx);
|
||||||
return ERR_PTR(err);
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue