Messages in this thread | | | Date | Thu, 20 Jan 2022 14:16:22 +0000 | Subject | Re: [PATCH 1/9] KVM: SVM: Never reject emulation due to SMAP errata for !SEV guests | From | Liam Merwick <> |
| |
On 20/01/2022 01:07, Sean Christopherson wrote: > 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>
Reviewed-by: Liam Merwick <liam.merwick@oracle.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); > }
| |