mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
conf: Fix leak in virNodeDeviceDefParseXML
The 'nodes' is overwritten after the first usage and possibly leaked if any code in the first set of parsing goes to error. Found by Coverity. Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
38a8489c01
commit
ca1f385457
@ -1766,7 +1766,7 @@ virNodeDeviceDefParseXML(xmlXPathContextPtr ctxt,
|
|||||||
{
|
{
|
||||||
virNodeDeviceDefPtr def;
|
virNodeDeviceDefPtr def;
|
||||||
virNodeDevCapsDefPtr *next_cap;
|
virNodeDevCapsDefPtr *next_cap;
|
||||||
xmlNodePtr *nodes;
|
xmlNodePtr *nodes = NULL;
|
||||||
int n, m;
|
int n, m;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
@ -1789,7 +1789,6 @@ virNodeDeviceDefParseXML(xmlXPathContextPtr ctxt,
|
|||||||
def->sysfs_path = virXPathString("string(./path[1])", ctxt);
|
def->sysfs_path = virXPathString("string(./path[1])", ctxt);
|
||||||
|
|
||||||
/* Parse devnodes */
|
/* Parse devnodes */
|
||||||
nodes = NULL;
|
|
||||||
if ((n = virXPathNodeSet("./devnode", ctxt, &nodes)) < 0)
|
if ((n = virXPathNodeSet("./devnode", ctxt, &nodes)) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
@ -1842,7 +1841,7 @@ virNodeDeviceDefParseXML(xmlXPathContextPtr ctxt,
|
|||||||
ctxt);
|
ctxt);
|
||||||
|
|
||||||
/* Parse device capabilities */
|
/* Parse device capabilities */
|
||||||
nodes = NULL;
|
VIR_FREE(nodes);
|
||||||
if ((n = virXPathNodeSet("./capability", ctxt, &nodes)) < 0)
|
if ((n = virXPathNodeSet("./capability", ctxt, &nodes)) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
@ -1859,10 +1858,8 @@ virNodeDeviceDefParseXML(xmlXPathContextPtr ctxt,
|
|||||||
nodes[i],
|
nodes[i],
|
||||||
create,
|
create,
|
||||||
virt_type);
|
virt_type);
|
||||||
if (!*next_cap) {
|
if (!*next_cap)
|
||||||
VIR_FREE(nodes);
|
|
||||||
goto error;
|
goto error;
|
||||||
}
|
|
||||||
|
|
||||||
next_cap = &(*next_cap)->next;
|
next_cap = &(*next_cap)->next;
|
||||||
}
|
}
|
||||||
@ -1872,6 +1869,7 @@ virNodeDeviceDefParseXML(xmlXPathContextPtr ctxt,
|
|||||||
|
|
||||||
error:
|
error:
|
||||||
virNodeDeviceDefFree(def);
|
virNodeDeviceDefFree(def);
|
||||||
|
VIR_FREE(nodes);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user