• Paolo Bonzini's avatar
    KVM: guest_memfd: Add interface for populating gmem pages with user data · 1f6c06b1
    Paolo Bonzini authored
    During guest run-time, kvm_arch_gmem_prepare() is issued as needed to
    prepare newly-allocated gmem pages prior to mapping them into the guest.
    In the case of SEV-SNP, this mainly involves setting the pages to
    private in the RMP table.
    
    However, for the GPA ranges comprising the initial guest payload, which
    are encrypted/measured prior to starting the guest, the gmem pages need
    to be accessed prior to setting them to private in the RMP table so they
    can be initialized with the userspace-provided data. Additionally, an
    SNP firmware call is needed afterward to encrypt them in-place and
    measure the contents into the guest's launch digest.
    
    While it is possible to bypass the kvm_arch_gmem_prepare() hooks so that
    this handling can be done in an open-coded/vendor-specific manner, this
    may expose more gmem-internal state/dependencies to external callers
    than necessary. Try to avoid this by implementing an interface that
    tries to handle as much of the common functionality inside gmem as
    possible, while also making it generic enough to potentially be
    usable/extensible for TDX as well.
    Suggested-by: default avatarSean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarMichael Roth <michael.roth@amd.com>
    Co-developed-by: default avatarMichael Roth <michael.roth@amd.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    1f6c06b1
guest_memfd.c 14.8 KB