lkml.org 
[lkml]   [2023]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v13 108/113] KVM: TDX: Add a method to ignore for TDX to ignore hypercall patch
    Date
    From: Isaku Yamahata <isaku.yamahata@intel.com>

    Because guest TD memory is protected, VMM patching guest binary for
    hypercall instruction isn't possible. Add a method to ignore hypercall
    patching with a warning. Note: guest TD kernel needs to be modified to use
    TDG.VP.VMCALL for hypercall.

    Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
    ---
    arch/x86/kvm/vmx/main.c | 15 ++++++++++++++-
    1 file changed, 14 insertions(+), 1 deletion(-)

    diff --git a/arch/x86/kvm/vmx/main.c b/arch/x86/kvm/vmx/main.c
    index dfa072253397..21aebf38697a 100644
    --- a/arch/x86/kvm/vmx/main.c
    +++ b/arch/x86/kvm/vmx/main.c
    @@ -725,6 +725,19 @@ static u32 vt_get_interrupt_shadow(struct kvm_vcpu *vcpu)
    return vmx_get_interrupt_shadow(vcpu);
    }

    +static void vt_patch_hypercall(struct kvm_vcpu *vcpu,
    + unsigned char *hypercall)
    +{
    + /*
    + * Because guest memory is protected, guest can't be patched. TD kernel
    + * is modified to use TDG.VP.VMCAL for hypercall.
    + */
    + if (KVM_BUG_ON(is_td_vcpu(vcpu), vcpu->kvm))
    + return;
    +
    + vmx_patch_hypercall(vcpu, hypercall);
    +}
    +
    static void vt_inject_irq(struct kvm_vcpu *vcpu, bool reinjected)
    {
    if (is_td_vcpu(vcpu))
    @@ -994,7 +1007,7 @@ struct kvm_x86_ops vt_x86_ops __initdata = {
    .update_emulated_instruction = vmx_update_emulated_instruction,
    .set_interrupt_shadow = vt_set_interrupt_shadow,
    .get_interrupt_shadow = vt_get_interrupt_shadow,
    - .patch_hypercall = vmx_patch_hypercall,
    + .patch_hypercall = vt_patch_hypercall,
    .inject_irq = vt_inject_irq,
    .inject_nmi = vt_inject_nmi,
    .inject_exception = vt_inject_exception,
    --
    2.25.1
    \
     
     \ /
      Last update: 2023-03-27 00:55    [W:4.965 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site