mirror of https://gitee.com/openkylin/linux.git
KVM: SVM: Clear C-bit from the page fault address
When SEV is active, on #VMEXIT the page fault address will contain the C-bit. We must clear the C-bit before handling the fault. Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: "Radim Krčmář" <rkrcmar@redhat.com> Cc: Joerg Roedel <joro@8bytes.org> Cc: Borislav Petkov <bp@suse.de> Cc: Tom Lendacky <thomas.lendacky@amd.com> Cc: x86@kernel.org Cc: kvm@vger.kernel.org Cc: linux-kernel@vger.kernel.org Reviewed-by: Borislav Petkov <bp@suse.de> Signed-off-by: Brijesh Singh <brijesh.singh@amd.com>
This commit is contained in:
parent
1e80fdc09d
commit
0ede79e132
|
@ -2430,7 +2430,7 @@ static void svm_set_dr7(struct kvm_vcpu *vcpu, unsigned long value)
|
||||||
|
|
||||||
static int pf_interception(struct vcpu_svm *svm)
|
static int pf_interception(struct vcpu_svm *svm)
|
||||||
{
|
{
|
||||||
u64 fault_address = svm->vmcb->control.exit_info_2;
|
u64 fault_address = __sme_clr(svm->vmcb->control.exit_info_2);
|
||||||
u64 error_code = svm->vmcb->control.exit_info_1;
|
u64 error_code = svm->vmcb->control.exit_info_1;
|
||||||
|
|
||||||
return kvm_handle_page_fault(&svm->vcpu, error_code, fault_address,
|
return kvm_handle_page_fault(&svm->vcpu, error_code, fault_address,
|
||||||
|
@ -2440,7 +2440,7 @@ static int pf_interception(struct vcpu_svm *svm)
|
||||||
|
|
||||||
static int npf_interception(struct vcpu_svm *svm)
|
static int npf_interception(struct vcpu_svm *svm)
|
||||||
{
|
{
|
||||||
u64 fault_address = svm->vmcb->control.exit_info_2;
|
u64 fault_address = __sme_clr(svm->vmcb->control.exit_info_2);
|
||||||
u64 error_code = svm->vmcb->control.exit_info_1;
|
u64 error_code = svm->vmcb->control.exit_info_1;
|
||||||
|
|
||||||
trace_kvm_page_fault(fault_address, error_code);
|
trace_kvm_page_fault(fault_address, error_code);
|
||||||
|
|
Loading…
Reference in New Issue