All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH 1/2] migration/multifd: fix memleaks in multifd_new_send_channel_async
  2020-05-06  9:54 ` [PATCH 1/2] migration/multifd: fix memleaks in multifd_new_send_channel_async Pan Nengyuan
@ 2020-05-06  8:42   ` Juan Quintela
  0 siblings, 0 replies; 6+ messages in thread
From: Juan Quintela @ 2020-05-06  8:42 UTC (permalink / raw)
  To: Pan Nengyuan; +Cc: zhang.zhanghailiang, euler.robot, dgilbert, qemu-devel

Pan Nengyuan <pannengyuan@huawei.com> wrote:
> When error happen in multifd_new_send_channel_async, 'sioc' will not be used
> to create the multifd_send_thread. Let's free it to avoid a memleak. And also
> do error_free after migrate_set_error() to avoid another leak in the same place.
>
> The leak stack:
> Direct leak of 2880 byte(s) in 8 object(s) allocated from:
>     #0 0x7f20b5118ae8 in __interceptor_malloc (/lib64/libasan.so.5+0xefae8)
>     #1 0x7f20b44df1d5 in g_malloc (/lib64/libglib-2.0.so.0+0x531d5)
>     #2 0x564133bce18b in object_new_with_type /mnt/sdb/backup/qemu/qom/object.c:683
>     #3 0x564133eea950 in qio_channel_socket_new /mnt/sdb/backup/qemu/io/channel-socket.c:56
>     #4 0x5641339cfe4f in socket_send_channel_create /mnt/sdb/backup/qemu/migration/socket.c:37
>     #5 0x564133a10328 in multifd_save_setup /mnt/sdb/backup/qemu/migration/multifd.c:772
>     #6 0x5641339cebed in migrate_fd_connect /mnt/sdb/backup/qemu/migration/migration.c:3530
>     #7 0x5641339d15e4 in migration_channel_connect /mnt/sdb/backup/qemu/migration/channel.c:92
>     #8 0x5641339cf5b7 in socket_outgoing_migration /mnt/sdb/backup/qemu/migration/socket.c:108
>
> Direct leak of 384 byte(s) in 8 object(s) allocated from:
>     #0 0x7f20b5118cf0 in calloc (/lib64/libasan.so.5+0xefcf0)
>     #1 0x7f20b44df22d in g_malloc0 (/lib64/libglib-2.0.so.0+0x5322d)
>     #2 0x56413406fc17 in error_setv /mnt/sdb/backup/qemu/util/error.c:61
>     #3 0x564134070464 in error_setg_errno_internal /mnt/sdb/backup/qemu/util/error.c:109
>     #4 0x5641340851be in inet_connect_addr /mnt/sdb/backup/qemu/util/qemu-sockets.c:379
>     #5 0x5641340851be in inet_connect_saddr /mnt/sdb/backup/qemu/util/qemu-sockets.c:458
>     #6 0x5641340870ab in socket_connect /mnt/sdb/backup/qemu/util/qemu-sockets.c:1105
>     #7 0x564133eeaabf in qio_channel_socket_connect_sync /mnt/sdb/backup/qemu/io/channel-socket.c:145
>     #8 0x564133eeabf5 in qio_channel_socket_connect_worker /mnt/sdb/backup/qemu/io/channel-socket.c:168
>
> Indirect leak of 360 byte(s) in 8 object(s) allocated from:
>     #0 0x7f20b5118ae8 in __interceptor_malloc (/lib64/libasan.so.5+0xefae8)
>     #1 0x7f20af901817 in __GI___vasprintf_chk (/lib64/libc.so.6+0x10d817)
>     #2 0x7f20b451fa6c in g_vasprintf (/lib64/libglib-2.0.so.0+0x93a6c)
>     #3 0x7f20b44f8cd0 in g_strdup_vprintf (/lib64/libglib-2.0.so.0+0x6ccd0)
>     #4 0x7f20b44f8d8c in g_strdup_printf (/lib64/libglib-2.0.so.0+0x6cd8c)
>     #5 0x56413406fc86 in error_setv /mnt/sdb/backup/qemu/util/error.c:65
>     #6 0x564134070464 in error_setg_errno_internal /mnt/sdb/backup/qemu/util/error.c:109
>     #7 0x5641340851be in inet_connect_addr /mnt/sdb/backup/qemu/util/qemu-sockets.c:379
>     #8 0x5641340851be in inet_connect_saddr /mnt/sdb/backup/qemu/util/qemu-sockets.c:458
>     #9 0x5641340870ab in socket_connect /mnt/sdb/backup/qemu/util/qemu-sockets.c:1105
>     #10 0x564133eeaabf in qio_channel_socket_connect_sync /mnt/sdb/backup/qemu/io/channel-socket.c:145
>     #11 0x564133eeabf5 in qio_channel_socket_connect_worker /mnt/sdb/backup/qemu/io/channel-socket.c:168
>
> Reported-by: Euler Robot <euler.robot@huawei.com>
> Signed-off-by: Pan Nengyuan <pannengyuan@huawei.com>

Reviewed-by: Juan Quintela <quintela@redhat.com>

I am not sure that this are the only possible error cases, but they are
a step on the right direction.

Thanks, Juan.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/2] migration/multifd: Do error_free after migrate_set_error to avoid memleaks
  2020-05-06  9:54 ` [PATCH 2/2] migration/multifd: Do error_free after migrate_set_error to avoid memleaks Pan Nengyuan
@ 2020-05-06  8:43   ` Juan Quintela
  0 siblings, 0 replies; 6+ messages in thread
From: Juan Quintela @ 2020-05-06  8:43 UTC (permalink / raw)
  To: Pan Nengyuan; +Cc: zhang.zhanghailiang, euler.robot, dgilbert, qemu-devel

Pan Nengyuan <pannengyuan@huawei.com> wrote:
> When error happen in multifd_send_thread, it use error_copy to set migrate error in
> multifd_send_terminate_threads(). We should call error_free after it.
>
> Similarly, fix another two places in multifd_recv_thread/multifd_save_cleanup.
>
> The leak stack:
> Direct leak of 48 byte(s) in 1 object(s) allocated from:
>     #0 0x7f781af07cf0 in calloc (/lib64/libasan.so.5+0xefcf0)
>     #1 0x7f781a2ce22d in g_malloc0 (/lib64/libglib-2.0.so.0+0x5322d)
>     #2 0x55ee1d075c17 in error_setv /mnt/sdb/backup/qemu/util/error.c:61
>     #3 0x55ee1d076464 in error_setg_errno_internal /mnt/sdb/backup/qemu/util/error.c:109
>     #4 0x55ee1cef066e in qio_channel_socket_writev /mnt/sdb/backup/qemu/io/channel-socket.c:569
>     #5 0x55ee1cee806b in qio_channel_writev /mnt/sdb/backup/qemu/io/channel.c:207
>     #6 0x55ee1cee806b in qio_channel_writev_all /mnt/sdb/backup/qemu/io/channel.c:171
>     #7 0x55ee1cee8248 in qio_channel_write_all /mnt/sdb/backup/qemu/io/channel.c:257
>     #8 0x55ee1ca12c9a in multifd_send_thread /mnt/sdb/backup/qemu/migration/multifd.c:657
>     #9 0x55ee1d0607fc in qemu_thread_start /mnt/sdb/backup/qemu/util/qemu-thread-posix.c:519
>     #10 0x7f78159ae2dd in start_thread (/lib64/libpthread.so.0+0x82dd)
>     #11 0x7f78156df4b2 in __GI___clone (/lib64/libc.so.6+0xfc4b2)
>
> Indirect leak of 52 byte(s) in 1 object(s) allocated from:
>     #0 0x7f781af07f28 in __interceptor_realloc (/lib64/libasan.so.5+0xeff28)
>     #1 0x7f78156f07d9 in __GI___vasprintf_chk (/lib64/libc.so.6+0x10d7d9)
>     #2 0x7f781a30ea6c in g_vasprintf (/lib64/libglib-2.0.so.0+0x93a6c)
>     #3 0x7f781a2e7cd0 in g_strdup_vprintf (/lib64/libglib-2.0.so.0+0x6ccd0)
>     #4 0x7f781a2e7d8c in g_strdup_printf (/lib64/libglib-2.0.so.0+0x6cd8c)
>     #5 0x55ee1d075c86 in error_setv /mnt/sdb/backup/qemu/util/error.c:65
>     #6 0x55ee1d076464 in error_setg_errno_internal /mnt/sdb/backup/qemu/util/error.c:109
>     #7 0x55ee1cef066e in qio_channel_socket_writev /mnt/sdb/backup/qemu/io/channel-socket.c:569
>     #8 0x55ee1cee806b in qio_channel_writev /mnt/sdb/backup/qemu/io/channel.c:207
>     #9 0x55ee1cee806b in qio_channel_writev_all /mnt/sdb/backup/qemu/io/channel.c:171
>     #10 0x55ee1cee8248 in qio_channel_write_all /mnt/sdb/backup/qemu/io/channel.c:257
>     #11 0x55ee1ca12c9a in multifd_send_thread /mnt/sdb/backup/qemu/migration/multifd.c:657
>     #12 0x55ee1d0607fc in qemu_thread_start /mnt/sdb/backup/qemu/util/qemu-thread-posix.c:519
>     #13 0x7f78159ae2dd in start_thread (/lib64/libpthread.so.0+0x82dd)
>     #14 0x7f78156df4b2 in __GI___clone (/lib64/libc.so.6+0xfc4b2)
>
> Reported-by: Euler Robot <euler.robot@huawei.com>
> Signed-off-by: Pan Nengyuan <pannengyuan@huawei.com>

Reviewed-by: Juan Quintela <quintela@redhat.com>



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 0/2] migration/multifd: fix two memleaks
@ 2020-05-06  9:54 Pan Nengyuan
  2020-05-06  9:54 ` [PATCH 1/2] migration/multifd: fix memleaks in multifd_new_send_channel_async Pan Nengyuan
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Pan Nengyuan @ 2020-05-06  9:54 UTC (permalink / raw)
  To: quintela, dgilbert
  Cc: zhang.zhanghailiang, Pan Nengyuan, qemu-devel, euler.robot

Fix two memleaks in multifd_send_thread/multifd_new_send_channel_async when error happen.

Pan Nengyuan (2):
  migration/multifd: fix memleaks in multifd_new_send_channel_async
  migration/multifd: Do error_free after migrate_set_error to avoid
    memleaks

 migration/multifd.c | 5 +++++
 1 file changed, 5 insertions(+)

-- 
2.18.2



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/2] migration/multifd: fix memleaks in multifd_new_send_channel_async
  2020-05-06  9:54 [PATCH 0/2] migration/multifd: fix two memleaks Pan Nengyuan
@ 2020-05-06  9:54 ` Pan Nengyuan
  2020-05-06  8:42   ` Juan Quintela
  2020-05-06  9:54 ` [PATCH 2/2] migration/multifd: Do error_free after migrate_set_error to avoid memleaks Pan Nengyuan
  2020-05-07 15:55 ` [PATCH 0/2] migration/multifd: fix two memleaks Dr. David Alan Gilbert
  2 siblings, 1 reply; 6+ messages in thread
From: Pan Nengyuan @ 2020-05-06  9:54 UTC (permalink / raw)
  To: quintela, dgilbert
  Cc: zhang.zhanghailiang, Pan Nengyuan, qemu-devel, euler.robot

When error happen in multifd_new_send_channel_async, 'sioc' will not be used
to create the multifd_send_thread. Let's free it to avoid a memleak. And also
do error_free after migrate_set_error() to avoid another leak in the same place.

The leak stack:
Direct leak of 2880 byte(s) in 8 object(s) allocated from:
    #0 0x7f20b5118ae8 in __interceptor_malloc (/lib64/libasan.so.5+0xefae8)
    #1 0x7f20b44df1d5 in g_malloc (/lib64/libglib-2.0.so.0+0x531d5)
    #2 0x564133bce18b in object_new_with_type /mnt/sdb/backup/qemu/qom/object.c:683
    #3 0x564133eea950 in qio_channel_socket_new /mnt/sdb/backup/qemu/io/channel-socket.c:56
    #4 0x5641339cfe4f in socket_send_channel_create /mnt/sdb/backup/qemu/migration/socket.c:37
    #5 0x564133a10328 in multifd_save_setup /mnt/sdb/backup/qemu/migration/multifd.c:772
    #6 0x5641339cebed in migrate_fd_connect /mnt/sdb/backup/qemu/migration/migration.c:3530
    #7 0x5641339d15e4 in migration_channel_connect /mnt/sdb/backup/qemu/migration/channel.c:92
    #8 0x5641339cf5b7 in socket_outgoing_migration /mnt/sdb/backup/qemu/migration/socket.c:108

Direct leak of 384 byte(s) in 8 object(s) allocated from:
    #0 0x7f20b5118cf0 in calloc (/lib64/libasan.so.5+0xefcf0)
    #1 0x7f20b44df22d in g_malloc0 (/lib64/libglib-2.0.so.0+0x5322d)
    #2 0x56413406fc17 in error_setv /mnt/sdb/backup/qemu/util/error.c:61
    #3 0x564134070464 in error_setg_errno_internal /mnt/sdb/backup/qemu/util/error.c:109
    #4 0x5641340851be in inet_connect_addr /mnt/sdb/backup/qemu/util/qemu-sockets.c:379
    #5 0x5641340851be in inet_connect_saddr /mnt/sdb/backup/qemu/util/qemu-sockets.c:458
    #6 0x5641340870ab in socket_connect /mnt/sdb/backup/qemu/util/qemu-sockets.c:1105
    #7 0x564133eeaabf in qio_channel_socket_connect_sync /mnt/sdb/backup/qemu/io/channel-socket.c:145
    #8 0x564133eeabf5 in qio_channel_socket_connect_worker /mnt/sdb/backup/qemu/io/channel-socket.c:168

Indirect leak of 360 byte(s) in 8 object(s) allocated from:
    #0 0x7f20b5118ae8 in __interceptor_malloc (/lib64/libasan.so.5+0xefae8)
    #1 0x7f20af901817 in __GI___vasprintf_chk (/lib64/libc.so.6+0x10d817)
    #2 0x7f20b451fa6c in g_vasprintf (/lib64/libglib-2.0.so.0+0x93a6c)
    #3 0x7f20b44f8cd0 in g_strdup_vprintf (/lib64/libglib-2.0.so.0+0x6ccd0)
    #4 0x7f20b44f8d8c in g_strdup_printf (/lib64/libglib-2.0.so.0+0x6cd8c)
    #5 0x56413406fc86 in error_setv /mnt/sdb/backup/qemu/util/error.c:65
    #6 0x564134070464 in error_setg_errno_internal /mnt/sdb/backup/qemu/util/error.c:109
    #7 0x5641340851be in inet_connect_addr /mnt/sdb/backup/qemu/util/qemu-sockets.c:379
    #8 0x5641340851be in inet_connect_saddr /mnt/sdb/backup/qemu/util/qemu-sockets.c:458
    #9 0x5641340870ab in socket_connect /mnt/sdb/backup/qemu/util/qemu-sockets.c:1105
    #10 0x564133eeaabf in qio_channel_socket_connect_sync /mnt/sdb/backup/qemu/io/channel-socket.c:145
    #11 0x564133eeabf5 in qio_channel_socket_connect_worker /mnt/sdb/backup/qemu/io/channel-socket.c:168

Reported-by: Euler Robot <euler.robot@huawei.com>
Signed-off-by: Pan Nengyuan <pannengyuan@huawei.com>
---
 migration/multifd.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/migration/multifd.c b/migration/multifd.c
index cb6a4a3ab8..197d59294a 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -727,6 +727,8 @@ static void multifd_new_send_channel_async(QIOTask *task, gpointer opaque)
          * its status.
          */
         p->quit = true;
+        object_unref(OBJECT(sioc));
+        error_free(local_err);
     } else {
         p->c = QIO_CHANNEL(sioc);
         qio_channel_set_delay(p->c, false);
-- 
2.18.2



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/2] migration/multifd: Do error_free after migrate_set_error to avoid memleaks
  2020-05-06  9:54 [PATCH 0/2] migration/multifd: fix two memleaks Pan Nengyuan
  2020-05-06  9:54 ` [PATCH 1/2] migration/multifd: fix memleaks in multifd_new_send_channel_async Pan Nengyuan
@ 2020-05-06  9:54 ` Pan Nengyuan
  2020-05-06  8:43   ` Juan Quintela
  2020-05-07 15:55 ` [PATCH 0/2] migration/multifd: fix two memleaks Dr. David Alan Gilbert
  2 siblings, 1 reply; 6+ messages in thread
From: Pan Nengyuan @ 2020-05-06  9:54 UTC (permalink / raw)
  To: quintela, dgilbert
  Cc: zhang.zhanghailiang, Pan Nengyuan, qemu-devel, euler.robot

When error happen in multifd_send_thread, it use error_copy to set migrate error in
multifd_send_terminate_threads(). We should call error_free after it.

Similarly, fix another two places in multifd_recv_thread/multifd_save_cleanup.

The leak stack:
Direct leak of 48 byte(s) in 1 object(s) allocated from:
    #0 0x7f781af07cf0 in calloc (/lib64/libasan.so.5+0xefcf0)
    #1 0x7f781a2ce22d in g_malloc0 (/lib64/libglib-2.0.so.0+0x5322d)
    #2 0x55ee1d075c17 in error_setv /mnt/sdb/backup/qemu/util/error.c:61
    #3 0x55ee1d076464 in error_setg_errno_internal /mnt/sdb/backup/qemu/util/error.c:109
    #4 0x55ee1cef066e in qio_channel_socket_writev /mnt/sdb/backup/qemu/io/channel-socket.c:569
    #5 0x55ee1cee806b in qio_channel_writev /mnt/sdb/backup/qemu/io/channel.c:207
    #6 0x55ee1cee806b in qio_channel_writev_all /mnt/sdb/backup/qemu/io/channel.c:171
    #7 0x55ee1cee8248 in qio_channel_write_all /mnt/sdb/backup/qemu/io/channel.c:257
    #8 0x55ee1ca12c9a in multifd_send_thread /mnt/sdb/backup/qemu/migration/multifd.c:657
    #9 0x55ee1d0607fc in qemu_thread_start /mnt/sdb/backup/qemu/util/qemu-thread-posix.c:519
    #10 0x7f78159ae2dd in start_thread (/lib64/libpthread.so.0+0x82dd)
    #11 0x7f78156df4b2 in __GI___clone (/lib64/libc.so.6+0xfc4b2)

Indirect leak of 52 byte(s) in 1 object(s) allocated from:
    #0 0x7f781af07f28 in __interceptor_realloc (/lib64/libasan.so.5+0xeff28)
    #1 0x7f78156f07d9 in __GI___vasprintf_chk (/lib64/libc.so.6+0x10d7d9)
    #2 0x7f781a30ea6c in g_vasprintf (/lib64/libglib-2.0.so.0+0x93a6c)
    #3 0x7f781a2e7cd0 in g_strdup_vprintf (/lib64/libglib-2.0.so.0+0x6ccd0)
    #4 0x7f781a2e7d8c in g_strdup_printf (/lib64/libglib-2.0.so.0+0x6cd8c)
    #5 0x55ee1d075c86 in error_setv /mnt/sdb/backup/qemu/util/error.c:65
    #6 0x55ee1d076464 in error_setg_errno_internal /mnt/sdb/backup/qemu/util/error.c:109
    #7 0x55ee1cef066e in qio_channel_socket_writev /mnt/sdb/backup/qemu/io/channel-socket.c:569
    #8 0x55ee1cee806b in qio_channel_writev /mnt/sdb/backup/qemu/io/channel.c:207
    #9 0x55ee1cee806b in qio_channel_writev_all /mnt/sdb/backup/qemu/io/channel.c:171
    #10 0x55ee1cee8248 in qio_channel_write_all /mnt/sdb/backup/qemu/io/channel.c:257
    #11 0x55ee1ca12c9a in multifd_send_thread /mnt/sdb/backup/qemu/migration/multifd.c:657
    #12 0x55ee1d0607fc in qemu_thread_start /mnt/sdb/backup/qemu/util/qemu-thread-posix.c:519
    #13 0x7f78159ae2dd in start_thread (/lib64/libpthread.so.0+0x82dd)
    #14 0x7f78156df4b2 in __GI___clone (/lib64/libc.so.6+0xfc4b2)

Reported-by: Euler Robot <euler.robot@huawei.com>
Signed-off-by: Pan Nengyuan <pannengyuan@huawei.com>
---
 migration/multifd.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/migration/multifd.c b/migration/multifd.c
index 197d59294a..35ae3180d2 100644
--- a/migration/multifd.c
+++ b/migration/multifd.c
@@ -550,6 +550,7 @@ void multifd_save_cleanup(void)
         multifd_send_state->ops->send_cleanup(p, &local_err);
         if (local_err) {
             migrate_set_error(migrate_get_current(), local_err);
+            error_free(local_err);
         }
     }
     qemu_sem_destroy(&multifd_send_state->channels_ready);
@@ -688,6 +689,7 @@ out:
     if (local_err) {
         trace_multifd_send_error(p->id);
         multifd_send_terminate_threads(local_err);
+        error_free(local_err);
     }
 
     /*
@@ -965,6 +967,7 @@ static void *multifd_recv_thread(void *opaque)
 
     if (local_err) {
         multifd_recv_terminate_threads(local_err);
+        error_free(local_err);
     }
     qemu_mutex_lock(&p->mutex);
     p->running = false;
-- 
2.18.2



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/2] migration/multifd: fix two memleaks
  2020-05-06  9:54 [PATCH 0/2] migration/multifd: fix two memleaks Pan Nengyuan
  2020-05-06  9:54 ` [PATCH 1/2] migration/multifd: fix memleaks in multifd_new_send_channel_async Pan Nengyuan
  2020-05-06  9:54 ` [PATCH 2/2] migration/multifd: Do error_free after migrate_set_error to avoid memleaks Pan Nengyuan
@ 2020-05-07 15:55 ` Dr. David Alan Gilbert
  2 siblings, 0 replies; 6+ messages in thread
From: Dr. David Alan Gilbert @ 2020-05-07 15:55 UTC (permalink / raw)
  To: Pan Nengyuan; +Cc: zhang.zhanghailiang, euler.robot, qemu-devel, quintela

* Pan Nengyuan (pannengyuan@huawei.com) wrote:
> Fix two memleaks in multifd_send_thread/multifd_new_send_channel_async when error happen.
> 
> Pan Nengyuan (2):
>   migration/multifd: fix memleaks in multifd_new_send_channel_async
>   migration/multifd: Do error_free after migrate_set_error to avoid
>     memleaks
> 
>  migration/multifd.c | 5 +++++
>  1 file changed, 5 insertions(+)

Queued

> 
> -- 
> 2.18.2
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-05-07 16:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-06  9:54 [PATCH 0/2] migration/multifd: fix two memleaks Pan Nengyuan
2020-05-06  9:54 ` [PATCH 1/2] migration/multifd: fix memleaks in multifd_new_send_channel_async Pan Nengyuan
2020-05-06  8:42   ` Juan Quintela
2020-05-06  9:54 ` [PATCH 2/2] migration/multifd: Do error_free after migrate_set_error to avoid memleaks Pan Nengyuan
2020-05-06  8:43   ` Juan Quintela
2020-05-07 15:55 ` [PATCH 0/2] migration/multifd: fix two memleaks Dr. David Alan Gilbert

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.