From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: Re: [PATCH v3 13/13] nEPT: Inject EPT violation/misconfigration Date: Tue, 14 May 2013 14:41:10 +0200 Message-ID: <519230E6.8080500@redhat.com> References: <1368060805-2790-1-git-send-email-jun.nakajima@intel.com> <1368060805-2790-2-git-send-email-jun.nakajima@intel.com> <1368060805-2790-3-git-send-email-jun.nakajima@intel.com> <1368060805-2790-4-git-send-email-jun.nakajima@intel.com> <1368060805-2790-5-git-send-email-jun.nakajima@intel.com> <1368060805-2790-6-git-send-email-jun.nakajima@intel.com> <1368060805-2790-7-git-send-email-jun.nakajima@intel.com> <1368060805-2790-8-git-send-email-jun.nakajima@intel.com> <1368060805-2790-9-git-send-email-jun.nakajima@intel.com> <1368060805-2790-10-git-send-email-jun.nakajima@intel.com> <1368060805-2790-11-git-send-email-jun.nakajima@intel.com> <1368060805-2790-12-git-send-email-jun.nakajima@intel.com> <1368060805-2790-13-git-send-email-jun.nakajima@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: Jun Nakajima Return-path: Received: from mail-yh0-f43.google.com ([209.85.213.43]:55905 "EHLO mail-yh0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757271Ab3ENMlQ (ORCPT ); Tue, 14 May 2013 08:41:16 -0400 Received: by mail-yh0-f43.google.com with SMTP id a41so66796yho.30 for ; Tue, 14 May 2013 05:41:16 -0700 (PDT) In-Reply-To: <1368060805-2790-13-git-send-email-jun.nakajima@intel.com> Sender: kvm-owner@vger.kernel.org List-ID: Il 09/05/2013 02:53, Jun Nakajima ha scritto: > +#endif > walker->fault.address = addr; > walker->fault.nested_page_fault = mmu != vcpu->arch.walk_mmu; > > diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c > index ca49e19..a44e7fd 100644 > --- a/arch/x86/kvm/vmx.c > +++ b/arch/x86/kvm/vmx.c > @@ -5310,6 +5310,8 @@ static int handle_ept_violation(struct kvm_vcpu *vcpu) > /* ept page table is present? */ > error_code |= (exit_qualification >> 3) & 0x1; > > + vcpu->arch.exit_qualification = exit_qualification; > + > return kvm_mmu_page_fault(vcpu, gpa, error_code, NULL, 0); > } > > @@ -7426,7 +7428,7 @@ static unsigned long nested_ept_get_cr3(struct kvm_vcpu *vcpu) > } > > static void nested_ept_inject_page_fault(struct kvm_vcpu *vcpu, > - struct x86_exception *fault) > + struct x86_exception *fault) > { > struct vmcs12 *vmcs12; > nested_vmx_vmexit(vcpu); > @@ -7435,10 +7437,81 @@ static void nested_ept_inject_page_fault(struct kvm_vcpu *vcpu, > * Note no need to set vmcs12->vm_exit_reason as it is already copied > * from vmcs02 in nested_vmx_vmexit() above, i.e., EPT_VIOLATION. > */ > - vmcs12->exit_qualification = fault->error_code; > + if (fault->error_code & PFERR_RSVD_MASK) > + vmcs12->vm_exit_reason = EXIT_REASON_EPT_MISCONFIG; > + else > + vmcs12->vm_exit_reason = EXIT_REASON_EPT_VIOLATION; > + > + vmcs12->exit_qualification = vcpu->arch.exit_qualification; Not exactly pretty, but I cannot think of anything better. Paolo