[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v1 4/6] x86/vvmx: add VMX_INSN_VMCLEAR_WITH_VMXON_PTR errno
> From: Sergey Dyasli [mailto:sergey.dyasli@xxxxxxxxxx] > Sent: Friday, October 12, 2018 11:28 PM > > And make nvmx_handle_vmclear() return the new errno in case the > provided > address is the same as vmxon region address. > > While at it, correct the return value for not-4KB-aligned case and for > invalid physaddr. > > Signed-off-by: Sergey Dyasli <sergey.dyasli@xxxxxxxxxx> > --- > xen/arch/x86/hvm/vmx/vvmx.c | 23 ++++++++++++++++++----- > xen/include/asm-x86/hvm/vmx/vmcs.h | 1 + > 2 files changed, 19 insertions(+), 5 deletions(-) > > diff --git a/xen/arch/x86/hvm/vmx/vvmx.c > b/xen/arch/x86/hvm/vmx/vvmx.c > index 4caa5811a1..8b691bfc04 100644 > --- a/xen/arch/x86/hvm/vmx/vvmx.c > +++ b/xen/arch/x86/hvm/vmx/vvmx.c > @@ -1804,9 +1804,20 @@ int nvmx_handle_vmclear(struct cpu_user_regs > *regs) > return rc; > > BUILD_BUG_ON(X86EMUL_OKAY != VMSUCCEED); /* rc = VMSUCCEED; > */ > + > + if ( gpa == vcpu_2_nvmx(v).vmxon_region_pa ) > + { > + vmfail(regs, VMX_INSN_VMCLEAR_WITH_VMXON_PTR); > + goto out; > + } > + > if ( gpa & 0xfff ) > - rc = VMFAIL_INVALID; > - else if ( gpa == nvcpu->nv_vvmcxaddr ) > + { > + vmfail(regs, VMX_INSN_VMCLEAR_INVALID_PHYADDR); > + goto out; > + } > + > + if ( gpa == nvcpu->nv_vvmcxaddr ) > { > if ( cpu_has_vmx_vmcs_shadowing ) > nvmx_clear_vmcs_pointer(v, nvcpu->nv_vvmcx); > @@ -1820,7 +1831,10 @@ int nvmx_handle_vmclear(struct cpu_user_regs > *regs) > bool_t writable; > > vvmcs = hvm_map_guest_frame_rw(paddr_to_pfn(gpa), 0, &writable); > - if ( vvmcs ) > + > + if ( !vvmcs ) > + rc = VMFAIL_VALID; > + else > { > if ( writable ) > clear_vvmcs_launched(&nvmx->launched_list, > @@ -1835,9 +1849,8 @@ int nvmx_handle_vmclear(struct cpu_user_regs > *regs) > vmsucceed(regs); > else if ( rc == VMFAIL_VALID ) > vmfail(regs, VMX_INSN_VMCLEAR_INVALID_PHYADDR); > - else > - vmfail_invalid(regs); > there is only one place poking rc now. clearer to replace rc with direct vmfail too. then above rc checks can be removed. > +out: > return X86EMUL_OKAY; > } > > diff --git a/xen/include/asm-x86/hvm/vmx/vmcs.h b/xen/include/asm- > x86/hvm/vmx/vmcs.h > index cae1861610..e84d2e482b 100644 > --- a/xen/include/asm-x86/hvm/vmx/vmcs.h > +++ b/xen/include/asm-x86/hvm/vmx/vmcs.h > @@ -529,6 +529,7 @@ enum vmx_insn_errno > { > VMX_INSN_SUCCEED = 0, > VMX_INSN_VMCLEAR_INVALID_PHYADDR = 2, > + VMX_INSN_VMCLEAR_WITH_VMXON_PTR = 3, > VMX_INSN_VMLAUNCH_NONCLEAR_VMCS = 4, > VMX_INSN_VMRESUME_NONLAUNCHED_VMCS = 5, > VMX_INSN_INVALID_CONTROL_STATE = 7, > -- > 2.17.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |