[libvirt] [PATCH 03/41] cpu: Detect arch when parsing CPU data
Jiri Denemark
jdenemar at redhat.com
Thu Jun 9 07:30:19 UTC 2016
On Wed, Jun 08, 2016 at 14:36:30 +0200, Peter Krempa wrote:
> On Wed, Jun 08, 2016 at 10:22:17 +0200, Jiri Denemark wrote:
> > A CPU data XML file already contains the architecture, let the parser
> > use it to detect which CPU driver should be used to parse the rest of
> > the file.
> >
> > Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> > ---
> > src/cpu/cpu.c | 54 ++++++++++++++++++++++++++++++++++++++++++++----------
> > src/cpu/cpu.h | 7 +++----
> > src/cpu/cpu_x86.c | 15 ++-------------
> > 3 files changed, 49 insertions(+), 27 deletions(-)
> >
> > diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c
> > index dbd0987..8c3d39d 100644
> > --- a/src/cpu/cpu.c
> > +++ b/src/cpu/cpu.c
>
> [...]
>
> > @@ -675,24 +689,44 @@ cpuDataFormat(const virCPUData *data)
> > * Returns internal CPU data structure parsed from the XML or NULL on error.
> > */
> > virCPUDataPtr
> > -cpuDataParse(virArch arch,
> > - const char *xmlStr)
> > +cpuDataParse(const char *xmlStr)
> > {
> > struct cpuArchDriver *driver;
> > + xmlDocPtr xml = NULL;
> > + xmlXPathContextPtr ctxt = NULL;
> > + virCPUDataPtr data = NULL;
> > + char *arch;
>
> 'arch' can be freed uninitialized.
>
> >
> > - VIR_DEBUG("arch=%s, xmlStr=%s", virArchToString(arch), xmlStr);
> > + VIR_DEBUG("xmlStr=%s", xmlStr);
> >
> > - if (!(driver = cpuGetSubDriver(arch)))
> > - return NULL;
> > + if (!(xml = virXMLParseStringCtxt(xmlStr, _("CPU data"), &ctxt))) {
> > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> > + _("cannot parse CPU data"));
> > + goto cleanup;
> > + }
> > +
> > + if (!(arch = virXPathString("string(/cpudata/@arch)", ctxt))) {
> > + virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
> > + _("missing CPU data architecture"));
> > + goto cleanup;
> > + }
> > +
> > + if (!(driver = cpuGetSubDriverByName(arch)))
> > + goto cleanup;
>
> This doesn't report errors.
Oops, cpuGetSubDriverByName in this patch cannot even return NULL since
it wrongly fallbacks to a default driver. I removed the fallback and let
cpuGetSubDriverByName report a proper error.
Jirka
More information about the libvir-list
mailing list