Patch "KVM: nSVM: Don't strip host's C-bit from guest's CR3 when reading PDPTRs" has been added to the 5.11-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    KVM: nSVM: Don't strip host's C-bit from guest's CR3 when reading PDPTRs

to the 5.11-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     kvm-nsvm-don-t-strip-host-s-c-bit-from-guest-s-cr3-w.patch
and it can be found in the queue-5.11 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 235d2ce3248db98f1698fcd751e6fa60e1bbccdf
Author: Sean Christopherson <seanjc@xxxxxxxxxx>
Date:   Wed Feb 3 16:01:07 2021 -0800

    KVM: nSVM: Don't strip host's C-bit from guest's CR3 when reading PDPTRs
    
    [ Upstream commit 2732be90235347a3be4babdc9f88a1ea93970b0b ]
    
    Don't clear the SME C-bit when reading a guest PDPTR, as the GPA (CR3) is
    in the guest domain.
    
    Barring a bizarre paravirtual use case, this is likely a benign bug.  SME
    is not emulated by KVM, loading SEV guest PDPTRs is doomed as KVM can't
    use the correct key to read guest memory, and setting guest MAXPHYADDR
    higher than the host, i.e. overlapping the C-bit, would cause faults in
    the guest.
    
    Note, for SEV guests, stripping the C-bit is technically aligned with CPU
    behavior, but for KVM it's the greater of two evils.  Because KVM doesn't
    have access to the guest's encryption key, ignoring the C-bit would at
    best result in KVM reading garbage.  By keeping the C-bit, KVM will
    fail its read (unless userspace creates a memslot with the C-bit set).
    The guest will still undoubtedly die, as KVM will use '0' for the PDPTR
    value, but that's preferable to interpreting encrypted data as a PDPTR.
    
    Fixes: d0ec49d4de90 ("kvm/x86/svm: Support Secure Memory Encryption within KVM")
    Cc: Tom Lendacky <thomas.lendacky@xxxxxxx>
    Cc: Brijesh Singh <brijesh.singh@xxxxxxx>
    Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
    Message-Id: <20210204000117.3303214-3-seanjc@xxxxxxxxxx>
    Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c
index db30670dd8c4a..8ded795a18151 100644
--- a/arch/x86/kvm/svm/nested.c
+++ b/arch/x86/kvm/svm/nested.c
@@ -58,7 +58,7 @@ static u64 nested_svm_get_tdp_pdptr(struct kvm_vcpu *vcpu, int index)
 	u64 pdpte;
 	int ret;
 
-	ret = kvm_vcpu_read_guest_page(vcpu, gpa_to_gfn(__sme_clr(cr3)), &pdpte,
+	ret = kvm_vcpu_read_guest_page(vcpu, gpa_to_gfn(cr3), &pdpte,
 				       offset_in_page(cr3) + index * 8, 8);
 	if (ret)
 		return 0;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux