From dc7339fc4f510fba1fdaf03e7287c98539344bf6 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Tue, 23 Jun 2015 14:25:20 +0200 Subject: [PATCH] conf: Enforce scheduler name when parsing XML We require the scheduler name attribute in the schemas but the code would actually be fine when it was omitted. Make it mandatory. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1234729 --- src/conf/domain_conf.c | 49 ++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index e592adfa9c..183e66c399 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -14153,32 +14153,35 @@ virDomainThreadSchedParse(xmlNodePtr node, } VIR_FREE(tmp); - tmp = virXMLPropString(node, "scheduler"); - if (tmp) { - if ((pol = virProcessSchedPolicyTypeFromString(tmp)) <= 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("Invalid scheduler attribute: '%s'"), - tmp); + if (!(tmp = virXMLPropString(node, "scheduler"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("Missing scheduler attribute")); + goto error; + } + + if ((pol = virProcessSchedPolicyTypeFromString(tmp)) <= 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Invalid scheduler attribute: '%s'"), + tmp); + goto error; + } + sp->policy = pol; + + VIR_FREE(tmp); + if (sp->policy == VIR_PROC_POLICY_FIFO || + sp->policy == VIR_PROC_POLICY_RR) { + tmp = virXMLPropString(node, "priority"); + if (!tmp) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Missing scheduler priority")); goto error; } - sp->policy = pol; - - VIR_FREE(tmp); - if (sp->policy == VIR_PROC_POLICY_FIFO || - sp->policy == VIR_PROC_POLICY_RR) { - tmp = virXMLPropString(node, "priority"); - if (!tmp) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("Missing scheduler priority")); - goto error; - } - if (virStrToLong_i(tmp, NULL, 10, &sp->priority) < 0) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("Invalid value for element priority")); - goto error; - } - VIR_FREE(tmp); + if (virStrToLong_i(tmp, NULL, 10, &sp->priority) < 0) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Invalid value for element priority")); + goto error; } + VIR_FREE(tmp); } return 0;