mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-10-11 03:33:52 +03: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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user