Re: [PATCH v2 0/3] TDX attestation support and GHCI fixup

From: Xiaoyao Li
Date: Fri Jun 20 2025 - 08:49:02 EST


On 6/20/2025 8:03 PM, Paolo Bonzini wrote:
Il ven 20 giu 2025, 03:30 Xiaoyao Li <xiaoyao.li@xxxxxxxxx> ha scritto:

On 6/20/2025 2:01 AM, Paolo Bonzini wrote:
This is a refresh of Binbin's patches with a change to the userspace
API. I am consolidating everything into a single KVM_EXIT_TDX and
adding to the contract that userspace is free to ignore it *except*
for having to reenter the guest with KVM_RUN.

If in the future this does not work, it should be possible to introduce
an opt-in interface. Hopefully that will not be necessary.

For <GetTdVmCallInfo> exit, I think KVM still needs to report which
TDVMCALL leaf will exit to userspace, to differentiate between different
KVMs.


The interface I chose is that KVM always exits, but it initializes the
output values such that userspace can leave them untouched for unknown
TDVMCALLs or unknown leaves. So there is no need for this.

Querying kernel support of other services can be added later, but
unless the GHCI adds more input or output fields to TdVmCallInfo there
is no need to limit the userspace exit to leaf 1.

I meant the case where KVM is going to support another optional TDVMCALL leaf in the future, e.g., SetEventNotifyInterrupt. At that time, userspace needs to differentiate between old KVM which only supports <GetQuote> and new KVM which supports both <GetQuote> and <SetEventNotifyInterrupt>.

- If it's old KVM, userspace should only set <GetQuote> bit in GetTdVmCallInfo exit. If userspace sets <SetEventNotifyInterrupt> in GetTdVmCallInfo exit and enumerate to TD guest, but it's wrong info since the KVM doesn't support <SetEventNotifyInterrupt> and userspace won't get any chance to handle the guest call of <SetEventNotifyInterrupt>

- But if it's new KVM, userspace can <SetEventNotifyInterrupt> bit in GetTdVmCallInfo exit and enumerate to TD guest.

Anyway, its the future problem, there should be various options to handle it in the future. This series works for the current need.


Paolo


But it's not a must for current <GetQuote> since it exits to userspace
from day 0. So that we can leave the report interface until KVM needs to
support user exit of another TDVMCALL leaf.

Paolo

Binbin Wu (3):
KVM: TDX: Add new TDVMCALL status code for unsupported subfuncs
KVM: TDX: Handle TDG.VP.VMCALL<GetQuote>
KVM: TDX: Exit to userspace for GetTdVmCallInfo

Documentation/virt/kvm/api.rst | 62 ++++++++++++++++++++++++-
arch/x86/include/asm/shared/tdx.h | 1 +
arch/x86/kvm/vmx/tdx.c | 77 ++++++++++++++++++++++++++++---
include/uapi/linux/kvm.h | 22 +++++++++
4 files changed, 154 insertions(+), 8 deletions(-)