[libvirt] [PATCH] qemuMonitorJSONEjectMedia: Don't leak stringified reply
Pavel Hrdina
phrdina at redhat.com
Tue Dec 15 09:34:50 UTC 2015
On Tue, Dec 15, 2015 at 10:17:23AM +0100, Michal Privoznik wrote:
> The return value of virJSONValueToString() should be freed when
> no longer needed. This is not the case after 256496e1.
>
> ==26902== 138 bytes in 2 blocks are definitely lost in loss record 1,051 of 1,239
> ==26902== at 0x4C29F80: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==26902== by 0xAA5F599: strdup (in /lib64/libc-2.21.so)
> ==26902== by 0x552BAD9: virStrdup (virstring.c:726)
> ==26902== by 0x54F60A7: virJSONValueToString (virjson.c:1790)
> ==26902== by 0x1DF6EBB9: qemuMonitorJSONEjectMedia (qemu_monitor_json.c:2225)
> ==26902== by 0x1DF57A4C: qemuMonitorEjectMedia (qemu_monitor.c:1985)
> ==26902== by 0x1DF1EF2D: qemuDomainChangeEjectableMedia (qemu_hotplug.c:199)
> ==26902== by 0x1DF90314: qemuDomainChangeDiskLive (qemu_driver.c:7985)
> ==26902== by 0x1DF90476: qemuDomainUpdateDeviceLive (qemu_driver.c:8030)
> ==26902== by 0x1DF91ED7: qemuDomainUpdateDeviceFlags (qemu_driver.c:8677)
> ==26902== by 0x561785F: virDomainUpdateDeviceFlags (libvirt-domain.c:8559)
> ==26902== by 0x134210: remoteDispatchDomainUpdateDeviceFlags (remote_dispatch.h:10966)
>
> ==26902== 106 bytes in 1 blocks are definitely lost in loss record 1,033 of 1,239
> ==26902== at 0x4C29F80: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==26902== by 0xAA5F599: strdup (in /lib64/libc-2.21.so)
> ==26902== by 0x552BAD9: virStrdup (virstring.c:726)
> ==26902== by 0x54F60A7: virJSONValueToString (virjson.c:1790)
> ==26902== by 0x1DF6EC0C: qemuMonitorJSONEjectMedia (qemu_monitor_json.c:2227)
> ==26902== by 0x1DF57A4C: qemuMonitorEjectMedia (qemu_monitor.c:1985)
> ==26902== by 0x1DF1EF2D: qemuDomainChangeEjectableMedia (qemu_hotplug.c:199)
> ==26902== by 0x1DF90314: qemuDomainChangeDiskLive (qemu_driver.c:7985)
> ==26902== by 0x1DF90476: qemuDomainUpdateDeviceLive (qemu_driver.c:8030)
> ==26902== by 0x1DF91ED7: qemuDomainUpdateDeviceFlags (qemu_driver.c:8677)
> ==26902== by 0x561785F: virDomainUpdateDeviceFlags (libvirt-domain.c:8559)
> ==26902== by 0x134210: remoteDispatchDomainUpdateDeviceFlags (remote_dispatch.h:10966)
>
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> src/qemu/qemu_monitor_json.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
> index 84c0be2..4ae63cf 100644
> --- a/src/qemu/qemu_monitor_json.c
> +++ b/src/qemu/qemu_monitor_json.c
> @@ -2222,10 +2222,13 @@ int qemuMonitorJSONEjectMedia(qemuMonitorPtr mon,
> if (ret == 0)
> ret = qemuMonitorJSONCheckError(cmd, reply);
>
> - VIR_DEBUG("%s", virJSONValueToString(reply, false));
> + if (ret < 0) {
> + char *replyStr = virJSONValueToString(reply, false);
>
> - if (ret < 0 && c_strcasestr(virJSONValueToString(reply, false), "is locked"))
> - ret = -2;
> + if (c_strcasestr(replyStr, "is locked"))
> + ret = -2;
> + VIR_FREE(replyStr);
> + }
>
> virJSONValueFree(cmd);
> virJSONValueFree(reply);
> --
> 2.4.10
ACK, Pavel
More information about the libvir-list
mailing list