[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <da4dfc96-b1ad-024c-e769-29d3af289eee@linux.alibaba.com>
Date: Wed, 20 Oct 2021 17:54:13 +0800
From: Lai Jiangshan <laijs@...ux.alibaba.com>
To: Sean Christopherson <seanjc@...gle.com>,
Lai Jiangshan <jiangshanlai@...il.com>
Cc: linux-kernel@...r.kernel.org, kvm@...r.kernel.org,
Paolo Bonzini <pbonzini@...hat.com>,
Vitaly Kuznetsov <vkuznets@...hat.com>,
Wanpeng Li <wanpengli@...cent.com>,
Jim Mattson <jmattson@...gle.com>,
Joerg Roedel <joro@...tes.org>,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>, Borislav Petkov <bp@...en8.de>,
x86@...nel.org, "H. Peter Anvin" <hpa@...or.com>
Subject: Re: [PATCH 1/4] KVM: X86: Fix tlb flush for tdp in
kvm_invalidate_pcid()
On 2021/10/19 23:25, Sean Christopherson wrote:
>
> /*
> * MOV CR3 and INVPCID are usually not intercepted when using TDP, but
> * this is reachable when running EPT=1 and unrestricted_guest=0, and
> * also via the emulator. KVM's TDP page tables are not in the scope of
> * the invalidation, but the guest's TLB entries need to be flushed as
> * the CPU may have cached entries in its TLB for the target PCID.
> */
Thanks! It is a better description.
I just read some interception policy in vmx.c, if EPT=1 but vmx_need_pf_intercept()
return true for some reasons/configs, #PF is intercepted. But CR3 write is not
intercepted, which means there will be an EPT fault _after_ (IIUC) the CR3 write if
the GPA of the new CR3 exceeds the guest maxphyaddr limit. And kvm queues a fault to
the guest which is also _after_ the CR3 write, but the guest expects the fault before
the write.
IIUC, it can be fixed by intercepting CR3 write or reversing the CR3 write in EPT
violation handler.
Thanks
Lai.
Powered by blists - more mailing lists