qemu: Avoid memleak on failure to format blockjobs

virXMLFormatElement() frees attrBuf on success, but not necessarily
on failure. Most other callers of this function take the time to
reset attrBuf afterwords, but qemuDomainObjPrivateXMLFormatBlockjobs()
was relying on it succeeding, and could thus result in a memory leak.

Signed-off-by: Eric Blake <eblake@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Eric Blake 2018-10-18 15:05:22 -05:00
parent c0790e3a09
commit ffac10c971

View File

@ -2232,11 +2232,14 @@ qemuDomainObjPrivateXMLFormatBlockjobs(virBufferPtr buf,
{
virBuffer attrBuf = VIR_BUFFER_INITIALIZER;
bool bj = qemuDomainHasBlockjob(vm, false);
int ret;
virBufferAsprintf(&attrBuf, " active='%s'",
virTristateBoolTypeToString(virTristateBoolFromBool(bj)));
return virXMLFormatElement(buf, "blockjobs", &attrBuf, NULL);
ret = virXMLFormatElement(buf, "blockjobs", &attrBuf, NULL);
virBufferFreeAndReset(&attrBuf);
return ret;
}