From 3f7c63bba5fb2abd7caed71c79194e5200ec0a19 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Mon, 18 Jul 2022 09:11:19 +0200 Subject: [PATCH] conf: Report an error when default TPM model is provided When "default" model of a TPM was provided, our parses accepts it happily even though the value is forbidden by our RNG and not documented as accepted value. This is because of < 0 vs <= 0 comparison of virDomainTPMModelTypeFromString() retval. Make the parser error out explicitly in this case. Users can always chose to not specify the attribute in which case we pick a sane default (in qemuDomainTPMDefPostParse()). Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- src/conf/domain_conf.c | 8 +++++--- src/conf/domain_conf.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e85cc1f809..6d806a39a9 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -10377,7 +10377,7 @@ virDomainTPMDefParseXML(virDomainXMLOption *xmlopt, model = virXMLPropString(node, "model"); if (model != NULL && - (def->model = virDomainTPMModelTypeFromString(model)) < 0) { + (def->model = virDomainTPMModelTypeFromString(model)) <= 0) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Unknown TPM frontend model '%s'"), model); goto error; @@ -24230,8 +24230,10 @@ virDomainTPMDefFormat(virBuffer *buf, g_auto(virBuffer) backendAttrBuf = VIR_BUFFER_INITIALIZER; g_auto(virBuffer) backendChildBuf = VIR_BUFFER_INIT_CHILD(&childBuf); - virBufferAsprintf(&attrBuf, " model='%s'", - virDomainTPMModelTypeToString(def->model)); + if (def->model != VIR_DOMAIN_TPM_MODEL_DEFAULT) { + virBufferAsprintf(&attrBuf, " model='%s'", + virDomainTPMModelTypeToString(def->model)); + } virBufferAsprintf(&backendAttrBuf, " type='%s'", virDomainTPMBackendTypeToString(def->type)); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 060c395943..3c58ea6d7e 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1400,7 +1400,7 @@ struct _virDomainHubDef { }; typedef enum { - VIR_DOMAIN_TPM_MODEL_DEFAULT, + VIR_DOMAIN_TPM_MODEL_DEFAULT = 0, VIR_DOMAIN_TPM_MODEL_TIS, VIR_DOMAIN_TPM_MODEL_CRB, VIR_DOMAIN_TPM_MODEL_SPAPR,