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().