Re: [PATCH 2/3 V7] KVM, SEV: Add support for SEV-ES intra host migration
From: Sean Christopherson
Date: Thu Sep 09 2021 - 21:23:23 EST
On Fri, Sep 10, 2021, Sean Christopherson wrote:
> On Thu, Sep 02, 2021, Peter Gonda wrote:
> > diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c
> > index 8db666a362d4..fac21a82e4de 100644
> > --- a/arch/x86/kvm/svm/sev.c
> > +++ b/arch/x86/kvm/svm/sev.c
> > @@ -1545,6 +1545,59 @@ static void migrate_info_from(struct kvm_sev_info *dst,
> > list_replace_init(&src->regions_list, &dst->regions_list);
> > }
> >
> > +static int migrate_vmsa_from(struct kvm *dst, struct kvm *src)
Better to call this sev_es_migrate_from()...
> > +{
> > + int i, num_vcpus;
> > + struct kvm_vcpu *dst_vcpu, *src_vcpu;
> > + struct vcpu_svm *dst_svm, *src_svm;
> > +
...because this should also clear kvm->es_active. KVM_SEV_INIT isn't problematic
(as currently written) because the common sev_guest_init() explicitly writes es_active,
but I think a clever userspace could get an SEV ASID into an "ES" guest via
KVM_CAP_VM_COPY_ENC_CONTEXT_FROM, which requires its dst to be !SEV and thus
doesn't touch es_active.
Huh, that's a bug, svm_vm_copy_asid_from() should explicitly disallow copying the
ASID from an SEV-ES guest. I'll send a patch for that.
Last thought, it's probably worth renaming migrate_info_from() to sev_migrate_from()
to pair with sev_es_migrate_from().