From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Sean Christopherson <seanjc@google.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
Wanpeng Li <wanpengli@tencent.com>,
Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
Tom Lendacky <thomas.lendacky@amd.com>,
Brijesh Singh <brijesh.singh@amd.com>,
Liam Merwick <liam.merwick@oracle.com>
Subject: [PATCH 1/9] KVM: SVM: Never reject emulation due to SMAP errata for !SEV guests
Date: Thu, 20 Jan 2022 01:07:11 +0000 [thread overview]
Message-ID: <20220120010719.711476-2-seanjc@google.com> (raw)
In-Reply-To: <20220120010719.711476-1-seanjc@google.com>
Always signal that emulation is possible for !SEV guests regardless of
whether or not the CPU provided a valid instruction byte stream. KVM can
read all guest state (memory and registers) for !SEV guests, i.e. can
fetch the code stream from memory even if the CPU failed to do so because
of the SMAP errata.
Fixes: 05d5a4863525 ("KVM: SVM: Workaround errata#1096 (insn_len maybe zero on SMAP violation)")
Cc: stable@vger.kernel.org
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Brijesh Singh <brijesh.singh@amd.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
arch/x86/kvm/svm/svm.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
index 6d31d357a83b..aa1649b8cd8f 100644
--- a/arch/x86/kvm/svm/svm.c
+++ b/arch/x86/kvm/svm/svm.c
@@ -4257,8 +4257,13 @@ static bool svm_can_emulate_instruction(struct kvm_vcpu *vcpu, void *insn, int i
bool smep, smap, is_user;
unsigned long cr4;
+ /* Emulation is always possible when KVM has access to all guest state. */
+ if (!sev_guest(vcpu->kvm))
+ return true;
+
/*
- * When the guest is an SEV-ES guest, emulation is not possible.
+ * Emulation is impossible for SEV-ES guests as KVM doesn't have access
+ * to guest register state.
*/
if (sev_es_guest(vcpu->kvm))
return false;
@@ -4318,9 +4323,6 @@ static bool svm_can_emulate_instruction(struct kvm_vcpu *vcpu, void *insn, int i
smap = cr4 & X86_CR4_SMAP;
is_user = svm_get_cpl(vcpu) == 3;
if (smap && (!smep || is_user)) {
- if (!sev_guest(vcpu->kvm))
- return true;
-
pr_err_ratelimited("KVM: SEV Guest triggered AMD Erratum 1096\n");
kvm_make_request(KVM_REQ_TRIPLE_FAULT, vcpu);
}
--
2.34.1.703.g22d0c6ccf7-goog
next prev parent reply other threads:[~2022-01-20 1:07 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-20 1:07 [PATCH 0/9] KVM: SVM: Fix and clean up "can emulate" mess Sean Christopherson
2022-01-20 1:07 ` Sean Christopherson [this message]
2022-01-20 14:16 ` [PATCH 1/9] KVM: SVM: Never reject emulation due to SMAP errata for !SEV guests Liam Merwick
2022-01-20 1:07 ` [PATCH 2/9] Revert "KVM: SVM: avoid infinite loop on NPF from bad address" Sean Christopherson
2022-01-20 14:17 ` Liam Merwick
2022-01-20 1:07 ` [PATCH 3/9] KVM: SVM: Don't intercept #GP for SEV guests Sean Christopherson
2022-01-20 14:30 ` Liam Merwick
2022-01-20 16:55 ` Sean Christopherson
2022-01-20 1:07 ` [PATCH 4/9] KVM: SVM: Explicitly require DECODEASSISTS to enable SEV support Sean Christopherson
2022-01-20 14:32 ` Liam Merwick
2022-01-20 1:07 ` [PATCH 5/9] KVM: x86: Pass emulation type to can_emulate_instruction() Sean Christopherson
2022-01-20 14:38 ` Liam Merwick
2022-01-20 1:07 ` [PATCH 6/9] KVM: SVM: WARN if KVM attempts emulation on #UD or #GP for SEV guests Sean Christopherson
2022-01-20 15:44 ` Liam Merwick
2022-01-20 17:04 ` Sean Christopherson
2022-01-25 14:56 ` Paolo Bonzini
2022-01-20 1:07 ` [PATCH 7/9] KVM: SVM: Inject #UD on attempted emulation for SEV guest w/o insn buffer Sean Christopherson
2022-01-20 16:11 ` Liam Merwick
2022-01-20 1:07 ` [PATCH 8/9] KVM: SVM: Don't apply SEV+SMAP workaround on code fetch or PT access Sean Christopherson
2022-01-20 16:37 ` Liam Merwick
2022-01-20 1:07 ` [PATCH 9/9] KVM: SVM: Don't kill SEV guest if SMAP erratum triggers in usermode Sean Christopherson
2022-01-20 16:46 ` Liam Merwick
2022-01-20 16:58 ` [PATCH 0/9] KVM: SVM: Fix and clean up "can emulate" mess Liam Merwick
2022-01-21 8:30 ` Liam Merwick
2022-01-25 14:52 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220120010719.711476-2-seanjc@google.com \
--to=seanjc@google.com \
--cc=brijesh.singh@amd.com \
--cc=jmattson@google.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
--cc=liam.merwick@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=thomas.lendacky@amd.com \
--cc=vkuznets@redhat.com \
--cc=wanpengli@tencent.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.