On Mon, Nov 24, 2025 at 12:15:06 +0000, Daniel P. Berrangé via Devel wrote:
> From: Daniel P. Berrangé <[email protected]>
> 
> Querying existence of the 'tdx-guest' type merely tells us whether
> QEMU has been compiled with TDX support, not whether it is usable
> on the host. Thus QEMU was incorrectly reporting
> 
>     <tdx supported='yes'/>
>     ...
>     <launchSecurity supported='yes'>
>       <enum name='sectype'>
>         <value>tdx</value>
>       </enum>
>     </launchSecurity>
> 
> on every platform with new enough QEMU.
> 
> Unfortunately an earlier patch for a 'query-tdx-capabilities' QMP
> command in QEMU was dropped, so there is no way to ask QEMU whether
> it can launch a TDX guest. Libvirt must directly query the KVM
> device and ask for supported VM types.
> 
> Signed-off-by: Daniel P. Berrangé <[email protected]>
> ---
>  src/qemu/qemu_capabilities.c | 51 ++++++++++++++++++++++++++++++++++++
>  src/qemu/qemu_capabilities.h |  3 +++
>  tests/domaincapsmock.c       |  6 +++++
>  3 files changed, 60 insertions(+)

[...]


> @@ -3686,6 +3692,50 @@ virQEMUCapsProbeQMPSEVCapabilities(virQEMUCaps 
> *qemuCaps,
>  }
>  
>  
> +bool
> +virQEMUCapsKVMSupportsVMTypeTDX(void)
> +{
> +#if defined(KVM_CAP_VM_TYPES) && defined(KVM_X86_TDX_VM)
> +    VIR_AUTOCLOSE kvmfd = -1;
> +    int types;
> +
> +    if (!virFileExists(KVM_DEVICE))
> +        return false;
> +
> +    if ((kvmfd = open(KVM_DEVICE, O_RDONLY)) < 0) {
> +        VIR_DEBUG("Unable to open %s, cannot check TDX", KVM_DEVICE);
> +        return false;
> +    }
> +
> +    if ((types = ioctl(kvmfd, KVM_CHECK_EXTENSION, KVM_CAP_VM_TYPES)) < 0)
> +        types = false;

Either 'types = 0' or 'return false;'


> +
> +    VIR_DEBUG("KVM VM types: 0x%x", types);
> +
> +    return !!(types & (1 << KVM_X86_TDX_VM));

Is there possibility that the answer could change based on some external
input where libvirt's cache isn't invalidated?

> +#else
> +    VIR_DEBUG("KVM not compiled");
> +    return false;
> +#endif
> +}

Reviewed-by: Peter Krempa <[email protected]>

Reply via email to