[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