[libvirt] [PATCH] cpu: Fail when CPU type cannot be detected from XML

Daniel Veillard veillard at redhat.com
Mon Jul 12 16:36:59 UTC 2010


On Mon, Jul 12, 2010 at 05:49:53PM +0200, Jiri Denemark wrote:
> When autodetecting whether XML describes guest or host CPU, the presence
> of <arch> element is checked. If it's present, we treat the XML as host
> CPU definition. Which is right, since guest CPU definitions do not
> contain <arch> element. However, if at the same time the root <cpu>
> element contains `match' attribute, we would silently ignore it and
> still treat the XML as host CPU. We should rather refuse such invalid
> XML.
> ---
>  src/conf/cpu_conf.c |   10 ++++++++--
>  1 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
> index d9aa69c..35bcce8 100644
> --- a/src/conf/cpu_conf.c
> +++ b/src/conf/cpu_conf.c
> @@ -130,9 +130,15 @@ virCPUDefParseXML(const xmlNodePtr node,
>      }
>  
>      if (mode == VIR_CPU_TYPE_AUTO) {
> -        if (virXPathBoolean("boolean(./arch)", ctxt))
> +        if (virXPathBoolean("boolean(./arch)", ctxt)) {
> +            if (virXPathBoolean("boolean(./@match)", ctxt)) {
> +                virCPUReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> +                        _("'arch' element element cannot be used inside 'cpu'"
> +                          " element with 'match' attribute'"));
> +                goto error;
> +            }
>              def->type = VIR_CPU_TYPE_HOST;
> -        else
> +        } else
>              def->type = VIR_CPU_TYPE_GUEST;
>      } else
>          def->type = mode;

  except since it's user provided data, we should use error
  VIR_ERR_XML_ERROR instead of VIR_ERR_INTERNAL_ERROR,

ACK, once that is fixed

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list