[Qemu-devel] [PATCH] websock: fix handshake leak

Marc-André Lureau posted 1 patch 5 years, 6 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20181019101346.3316-1-marcandre.lureau@redhat.com
Test docker-clang@ubuntu passed
Test checkpatch passed
Test asan passed
Test docker-mingw@fedora failed
Test docker-quick@centos7 passed
io/channel-websock.c | 1 +
1 file changed, 1 insertion(+)
[Qemu-devel] [PATCH] websock: fix handshake leak
Posted by Marc-André Lureau 5 years, 6 months ago
Thanks Valgrind:

==955== 217 bytes in 1 blocks are definitely lost in loss record 275 of 321
==955==    at 0x483A965: realloc (vg_replace_malloc.c:785)
==955==    by 0x50B6839: __vasprintf_chk (in /usr/lib64/libc-2.28.so)
==955==    by 0x49AA05C: g_vasprintf (in /usr/lib64/libglib-2.0.so.0.5800.1)
==955==    by 0x4983440: g_strdup_vprintf (in /usr/lib64/libglib-2.0.so.0.5800.1)
==955==    by 0x126048: qio_channel_websock_handshake_send_res (channel-websock.c:162)
==955==    by 0x1266E6: qio_channel_websock_handshake_send_res_ok (channel-websock.c:362)
==955==    by 0x126D3E: qio_channel_websock_handshake_process (channel-websock.c:468)
==955==    by 0x126EF2: qio_channel_websock_handshake_read (channel-websock.c:511)
==955==    by 0x12715B: qio_channel_websock_handshake_io (channel-websock.c:571)
==955==    by 0x125027: qio_channel_fd_source_dispatch (channel-watch.c:84)
==955==    by 0x496326C: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.5800.1)
==955==    by 0x169EC3: glib_pollfds_poll (main-loop.c:215)

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
 io/channel-websock.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/io/channel-websock.c b/io/channel-websock.c
index e6608b969d..dc43dc6bb9 100644
--- a/io/channel-websock.c
+++ b/io/channel-websock.c
@@ -163,6 +163,7 @@ qio_channel_websock_handshake_send_res(QIOChannelWebsock *ioc,
     responselen = strlen(response);
     buffer_reserve(&ioc->encoutput, responselen);
     buffer_append(&ioc->encoutput, response, responselen);
+    g_free(response);
     va_end(vargs);
 }
 
-- 
2.19.0.271.gfe8321ec05


Re: [Qemu-devel] [PATCH] websock: fix handshake leak
Posted by Daniel P. Berrangé 5 years, 6 months ago
On Fri, Oct 19, 2018 at 02:13:46PM +0400, Marc-André Lureau wrote:
> Thanks Valgrind:
> 
> ==955== 217 bytes in 1 blocks are definitely lost in loss record 275 of 321
> ==955==    at 0x483A965: realloc (vg_replace_malloc.c:785)
> ==955==    by 0x50B6839: __vasprintf_chk (in /usr/lib64/libc-2.28.so)
> ==955==    by 0x49AA05C: g_vasprintf (in /usr/lib64/libglib-2.0.so.0.5800.1)
> ==955==    by 0x4983440: g_strdup_vprintf (in /usr/lib64/libglib-2.0.so.0.5800.1)
> ==955==    by 0x126048: qio_channel_websock_handshake_send_res (channel-websock.c:162)
> ==955==    by 0x1266E6: qio_channel_websock_handshake_send_res_ok (channel-websock.c:362)
> ==955==    by 0x126D3E: qio_channel_websock_handshake_process (channel-websock.c:468)
> ==955==    by 0x126EF2: qio_channel_websock_handshake_read (channel-websock.c:511)
> ==955==    by 0x12715B: qio_channel_websock_handshake_io (channel-websock.c:571)
> ==955==    by 0x125027: qio_channel_fd_source_dispatch (channel-watch.c:84)
> ==955==    by 0x496326C: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.5800.1)
> ==955==    by 0x169EC3: glib_pollfds_poll (main-loop.c:215)
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>  io/channel-websock.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/io/channel-websock.c b/io/channel-websock.c
> index e6608b969d..dc43dc6bb9 100644
> --- a/io/channel-websock.c
> +++ b/io/channel-websock.c
> @@ -163,6 +163,7 @@ qio_channel_websock_handshake_send_res(QIOChannelWebsock *ioc,
>      responselen = strlen(response);
>      buffer_reserve(&ioc->encoutput, responselen);
>      buffer_append(&ioc->encoutput, response, responselen);
> +    g_free(response);
>      va_end(vargs);
>  }

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

Re: [Qemu-devel] [PATCH] websock: fix handshake leak
Posted by Philippe Mathieu-Daudé 5 years, 6 months ago
On 19/10/2018 12:13, Marc-André Lureau wrote:
> Thanks Valgrind:
> 
> ==955== 217 bytes in 1 blocks are definitely lost in loss record 275 of 321
> ==955==    at 0x483A965: realloc (vg_replace_malloc.c:785)
> ==955==    by 0x50B6839: __vasprintf_chk (in /usr/lib64/libc-2.28.so)
> ==955==    by 0x49AA05C: g_vasprintf (in /usr/lib64/libglib-2.0.so.0.5800.1)
> ==955==    by 0x4983440: g_strdup_vprintf (in /usr/lib64/libglib-2.0.so.0.5800.1)
> ==955==    by 0x126048: qio_channel_websock_handshake_send_res (channel-websock.c:162)
> ==955==    by 0x1266E6: qio_channel_websock_handshake_send_res_ok (channel-websock.c:362)
> ==955==    by 0x126D3E: qio_channel_websock_handshake_process (channel-websock.c:468)
> ==955==    by 0x126EF2: qio_channel_websock_handshake_read (channel-websock.c:511)
> ==955==    by 0x12715B: qio_channel_websock_handshake_io (channel-websock.c:571)
> ==955==    by 0x125027: qio_channel_fd_source_dispatch (channel-watch.c:84)
> ==955==    by 0x496326C: g_main_context_dispatch (in /usr/lib64/libglib-2.0.so.0.5800.1)
> ==955==    by 0x169EC3: glib_pollfds_poll (main-loop.c:215)
> 
Oops..

Missed in f69a8bde293.

> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> ---
>  io/channel-websock.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/io/channel-websock.c b/io/channel-websock.c
> index e6608b969d..dc43dc6bb9 100644
> --- a/io/channel-websock.c
> +++ b/io/channel-websock.c
> @@ -163,6 +163,7 @@ qio_channel_websock_handshake_send_res(QIOChannelWebsock *ioc,
>      responselen = strlen(response);
>      buffer_reserve(&ioc->encoutput, responselen);
>      buffer_append(&ioc->encoutput, response, responselen);
> +    g_free(response);
>      va_end(vargs);
>  }
>  
>