[libvirt PATCH 3/3] cpu: Fail CPU comparison in the presence of unknown elements.

Peter Krempa pkrempa at redhat.com
Wed Sep 16 13:43:21 UTC 2020


On Wed, Sep 16, 2020 at 15:33:56 +0200, Tim Wiederhake wrote:
> Signed-off-by: Tim Wiederhake <twiederh at redhat.com>
> ---
>  src/conf/cpu_conf.c | 38 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
> 
> diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
> index dea950ce68..a2ba92ced3 100644
> --- a/src/conf/cpu_conf.c
> +++ b/src/conf/cpu_conf.c
> @@ -659,6 +659,44 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
>          def->cache->mode = mode;
>      }
>  
> +    g_clear_pointer(&nodes, g_free);
> +    if ((n = virXPathNodeSet("./@*", ctxt, &nodes)) < 0)
> +        return -1;
> +
> +    for (i = 0; i < n; i++) {
> +        if (virXMLNodeNameEqual(nodes[i], "check") ||
> +            virXMLNodeNameEqual(nodes[i], "match") ||
> +            virXMLNodeNameEqual(nodes[i], "migratable") ||
> +            virXMLNodeNameEqual(nodes[i], "mode"))
> +            continue;
> +        virReportError(VIR_ERR_XML_ERROR,
> +                       _("unrecognized attribute in cpu element: %s"),
> +                       nodes[i]->name);
> +        return -1;
> +    }
> +
> +    g_clear_pointer(&nodes, g_free);
> +    if ((n = virXPathNodeSet("./*", ctxt, &nodes)) < 0)
> +        return -1;
> +
> +    for (i = 0; i < n; i++) {
> +        if (virXMLNodeNameEqual(nodes[i], "arch") ||
> +            virXMLNodeNameEqual(nodes[i], "cache") ||
> +            virXMLNodeNameEqual(nodes[i], "counter") ||
> +            virXMLNodeNameEqual(nodes[i], "feature") ||
> +            virXMLNodeNameEqual(nodes[i], "model") ||
> +            virXMLNodeNameEqual(nodes[i], "microcode") ||
> +            virXMLNodeNameEqual(nodes[i], "numa") ||
> +            virXMLNodeNameEqual(nodes[i], "pages") ||
> +            virXMLNodeNameEqual(nodes[i], "topology") ||
> +            virXMLNodeNameEqual(nodes[i], "vendor"))
> +            continue;
> +        virReportError(VIR_ERR_XML_ERROR,
> +                       _("unrecognized element in cpu element: %s"),
> +                       nodes[i]->name);

NACK this is ugly and unscalable.

Please implement it via RNG schema validation.




More information about the libvir-list mailing list