On Fri, May 24, 2024 at 02:21:20PM +0800, Zhenzhong Duan wrote: > When 'tdx' is used, the VM will launched with Intel TDX feature enabled. > TDX feature supports running encrypted VM (Trust Domain, TD) under the > control of KVM. A TD runs in a CPU model which protects the > confidentiality of its memory and its CPU state from other software > > There is a child element 'policy' and three optional element for tdx type. > In 'policy', bit 0 is set to enable TDX debug, bit 28 set to enable > sept-ve-disable, other bits are reserved currently. mrConfigId, mrOwner > and mrOwnerConfig are base64 encoded SHA384 digest. > > For example: > > <launchSecurity type='tdx'> > <policy>0x10000001</policy> > <mrConfigId>xxx</mrConfigId> > <mrOwner>xxx</mrOwner> > <mrOwnerConfig>xxx</mrOwnerConfig> > </launchSecurity> > > Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> > --- > src/conf/domain_conf.c | 42 +++++++++++++++++++++++++++++++ > src/conf/domain_conf.h | 9 +++++++ > src/conf/schemas/domaincommon.rng | 29 +++++++++++++++++++++ > src/conf/virconftypes.h | 2 ++ > src/qemu/qemu_command.c | 2 ++ > src/qemu/qemu_firmware.c | 1 + > src/qemu/qemu_namespace.c | 1 + > src/qemu/qemu_process.c | 1 + > src/qemu/qemu_validate.c | 1 + > 9 files changed, 88 insertions(+) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index a0912062ff..c557da0c65 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c
> @@ -13649,6 +13654,24 @@ virDomainSEVDefParseXML(virDomainSEVDef *def, > } > > > +static int > +virDomainTDXDefParseXML(virDomainTDXDef *def, > + xmlXPathContextPtr ctxt) > +{ > + if (virXPathULongLongBase("string(./policy)", ctxt, 16, &def->policy) < > 0) { > + virReportError(VIR_ERR_XML_ERROR, "%s", > + _("failed to get launch security policy for launch > security type TDX")); > + return -1; > + } This makes the 'policy' attribute mandatory, but QEMU is quite happy with it being unset, so we should not require this in libvirt either. > + > + def->mrconfigid = virXPathString("string(./mrConfigId)", ctxt); > + def->mrowner = virXPathString("string(./mrOwner)", ctxt); > + def->mrownerconfig = virXPathString("string(./mrOwnerConfig)", ctxt); > + > + return 0; > +} > diff --git a/src/conf/schemas/domaincommon.rng > b/src/conf/schemas/domaincommon.rng > index d84e030255..f6e1782b33 100644 > --- a/src/conf/schemas/domaincommon.rng > +++ b/src/conf/schemas/domaincommon.rng > @@ -520,6 +520,9 @@ > <value>s390-pv</value> > </attribute> > </group> > + <group> > + <ref name="launchSecurityTDX"/> > + </group> > </choice> > </element> > </define> > @@ -565,6 +568,32 @@ > </interleave> > </define> > > + <define name="launchSecurityTDX"> > + <attribute name="type"> > + <value>tdx</value> > + </attribute> > + <interleave> > + <element name="policy"> > + <ref name="hexuint"/> > + </element> This should be marked <optional> too. > + <optional> > + <element name="mrConfigId"> > + <data type="string"/> > + </element> > + </optional> > + <optional> > + <element name="mrOwner"> > + <data type="string"/> > + </element> > + </optional> > + <optional> > + <element name="mrOwnerConfig"> > + <data type="string"/> > + </element> > + </optional> > + </interleave> > + </define> > + > <!-- > Enable or disable perf events for the domain. For each > of the events the following rules apply: With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|