All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] fix two small memleaks
@ 2020-02-27  1:29 Pan Nengyuan
  2020-02-27  1:29 ` [PATCH v2 1/2] block/qcow2: do free crypto_opts in qcow2_close() Pan Nengyuan
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Pan Nengyuan @ 2020-02-27  1:29 UTC (permalink / raw)
  To: kwolf, mreitz
  Cc: euler.robot, Pan Nengyuan, qemu-devel, qemu-block, zhang.zhanghailiang

This series fix two small memleaks.
1. 'crypto_opts' forgot to free in qcow2_close(), do this cleanup in qcow2_close();
2. Do free filename/format in collect_image_check() when we re-allocate it.  

v2->v1:
- Instead of freeing part of fields in collect_image_check(), do discard the old check object and allocate a new one in the caller to make more sense.(suggested by Max Reitz)

Pan Nengyuan (2):
  block/qcow2: do free crypto_opts in qcow2_close()
  qemu-img: free memory before re-assign

 block/qcow2.c | 1 +
 qemu-img.c    | 2 ++
 2 files changed, 3 insertions(+)

-- 
2.18.2



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

* [PATCH v2 1/2] block/qcow2: do free crypto_opts in qcow2_close()
  2020-02-27  1:29 [PATCH v2 0/2] fix two small memleaks Pan Nengyuan
@ 2020-02-27  1:29 ` Pan Nengyuan
  2020-02-27  1:29 ` [PATCH v2 2/2] qemu-img: free memory before re-assign Pan Nengyuan
  2020-02-27 15:24 ` [PATCH v2 0/2] fix two small memleaks Max Reitz
  2 siblings, 0 replies; 4+ messages in thread
From: Pan Nengyuan @ 2020-02-27  1:29 UTC (permalink / raw)
  To: kwolf, mreitz
  Cc: euler.robot, Pan Nengyuan, qemu-devel, qemu-block, zhang.zhanghailiang

'crypto_opts' forgot to free in qcow2_close(), this patch fix the bellow leak stack:

Direct leak of 24 byte(s) in 1 object(s) allocated from:
    #0 0x7f0edd81f970 in __interceptor_calloc (/lib64/libasan.so.5+0xef970)
    #1 0x7f0edc6d149d in g_malloc0 (/lib64/libglib-2.0.so.0+0x5249d)
    #2 0x55d7eaede63d in qobject_input_start_struct /mnt/sdb/qemu-new/qemu_test/qemu/qapi/qobject-input-visitor.c:295
    #3 0x55d7eaed78b8 in visit_start_struct /mnt/sdb/qemu-new/qemu_test/qemu/qapi/qapi-visit-core.c:49
    #4 0x55d7eaf5140b in visit_type_QCryptoBlockOpenOptions qapi/qapi-visit-crypto.c:290
    #5 0x55d7eae43af3 in block_crypto_open_opts_init /mnt/sdb/qemu-new/qemu_test/qemu/block/crypto.c:163
    #6 0x55d7eacd2924 in qcow2_update_options_prepare /mnt/sdb/qemu-new/qemu_test/qemu/block/qcow2.c:1148
    #7 0x55d7eacd33f7 in qcow2_update_options /mnt/sdb/qemu-new/qemu_test/qemu/block/qcow2.c:1232
    #8 0x55d7eacd9680 in qcow2_do_open /mnt/sdb/qemu-new/qemu_test/qemu/block/qcow2.c:1512
    #9 0x55d7eacdc55e in qcow2_open_entry /mnt/sdb/qemu-new/qemu_test/qemu/block/qcow2.c:1792
    #10 0x55d7eacdc8fe in qcow2_open /mnt/sdb/qemu-new/qemu_test/qemu/block/qcow2.c:1819
    #11 0x55d7eac3742d in bdrv_open_driver /mnt/sdb/qemu-new/qemu_test/qemu/block.c:1317
    #12 0x55d7eac3e990 in bdrv_open_common /mnt/sdb/qemu-new/qemu_test/qemu/block.c:1575
    #13 0x55d7eac4442c in bdrv_open_inherit /mnt/sdb/qemu-new/qemu_test/qemu/block.c:3126
    #14 0x55d7eac45c3f in bdrv_open /mnt/sdb/qemu-new/qemu_test/qemu/block.c:3219
    #15 0x55d7ead8e8a4 in blk_new_open /mnt/sdb/qemu-new/qemu_test/qemu/block/block-backend.c:397
    #16 0x55d7eacde74c in qcow2_co_create /mnt/sdb/qemu-new/qemu_test/qemu/block/qcow2.c:3534
    #17 0x55d7eacdfa6d in qcow2_co_create_opts /mnt/sdb/qemu-new/qemu_test/qemu/block/qcow2.c:3668
    #18 0x55d7eac1c678 in bdrv_create_co_entry /mnt/sdb/qemu-new/qemu_test/qemu/block.c:485
    #19 0x55d7eb0024d2 in coroutine_trampoline /mnt/sdb/qemu-new/qemu_test/qemu/util/coroutine-ucontext.c:115

Reported-by: Euler Robot <euler.robot@huawei.com>
Signed-off-by: Pan Nengyuan <pannengyuan@huawei.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
---
 block/qcow2.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/block/qcow2.c b/block/qcow2.c
index 3c754f616b..f16e7f7782 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -2606,6 +2606,7 @@ static void qcow2_close(BlockDriverState *bs)
 
     qcrypto_block_free(s->crypto);
     s->crypto = NULL;
+    qapi_free_QCryptoBlockOpenOptions(s->crypto_opts);
 
     g_free(s->unknown_header_fields);
     cleanup_unknown_header_ext(bs);
-- 
2.18.2



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

* [PATCH v2 2/2] qemu-img: free memory before re-assign
  2020-02-27  1:29 [PATCH v2 0/2] fix two small memleaks Pan Nengyuan
  2020-02-27  1:29 ` [PATCH v2 1/2] block/qcow2: do free crypto_opts in qcow2_close() Pan Nengyuan
@ 2020-02-27  1:29 ` Pan Nengyuan
  2020-02-27 15:24 ` [PATCH v2 0/2] fix two small memleaks Max Reitz
  2 siblings, 0 replies; 4+ messages in thread
From: Pan Nengyuan @ 2020-02-27  1:29 UTC (permalink / raw)
  To: kwolf, mreitz
  Cc: euler.robot, Pan Nengyuan, qemu-devel, qemu-block, zhang.zhanghailiang

collect_image_check() is called twice in img_check(), the filename/format will be alloced without free the original memory.
It is not a big deal since the process will exit anyway, but seems like a clean code and it will remove the warning spotted by asan.

Reported-by: Euler Robot <euler.robot@huawei.com>
Signed-off-by: Pan Nengyuan <pannengyuan@huawei.com>
---
v2->v1:
- Instead of freeing part of props in collect_image_check(), do discard the old check object and allocate a new one in the caller to make more sense.(suggested by Max Reitz)
---
 qemu-img.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/qemu-img.c b/qemu-img.c
index 804630a368..a824b8576a 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -817,6 +817,8 @@ static int img_check(int argc, char **argv)
                     check->corruptions_fixed);
         }
 
+        qapi_free_ImageCheck(check);
+        check = g_new0(ImageCheck, 1);
         ret = collect_image_check(bs, check, filename, fmt, 0);
 
         check->leaks_fixed          = leaks_fixed;
-- 
2.18.2



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

* Re: [PATCH v2 0/2] fix two small memleaks
  2020-02-27  1:29 [PATCH v2 0/2] fix two small memleaks Pan Nengyuan
  2020-02-27  1:29 ` [PATCH v2 1/2] block/qcow2: do free crypto_opts in qcow2_close() Pan Nengyuan
  2020-02-27  1:29 ` [PATCH v2 2/2] qemu-img: free memory before re-assign Pan Nengyuan
@ 2020-02-27 15:24 ` Max Reitz
  2 siblings, 0 replies; 4+ messages in thread
From: Max Reitz @ 2020-02-27 15:24 UTC (permalink / raw)
  To: Pan Nengyuan, kwolf
  Cc: euler.robot, qemu-devel, qemu-block, zhang.zhanghailiang


[-- Attachment #1.1: Type: text/plain, Size: 763 bytes --]

On 27.02.20 02:29, Pan Nengyuan wrote:
> This series fix two small memleaks.
> 1. 'crypto_opts' forgot to free in qcow2_close(), do this cleanup in qcow2_close();
> 2. Do free filename/format in collect_image_check() when we re-allocate it.  
> 
> v2->v1:
> - Instead of freeing part of fields in collect_image_check(), do discard the old check object and allocate a new one in the caller to make more sense.(suggested by Max Reitz)
> 
> Pan Nengyuan (2):
>   block/qcow2: do free crypto_opts in qcow2_close()
>   qemu-img: free memory before re-assign
> 
>  block/qcow2.c | 1 +
>  qemu-img.c    | 2 ++
>  2 files changed, 3 insertions(+)

Thanks, applied to my block branch:

https://git.xanclic.moe/XanClic/qemu/commits/branch/block

Max


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

end of thread, other threads:[~2020-02-27 15:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-27  1:29 [PATCH v2 0/2] fix two small memleaks Pan Nengyuan
2020-02-27  1:29 ` [PATCH v2 1/2] block/qcow2: do free crypto_opts in qcow2_close() Pan Nengyuan
2020-02-27  1:29 ` [PATCH v2 2/2] qemu-img: free memory before re-assign Pan Nengyuan
2020-02-27 15:24 ` [PATCH v2 0/2] fix two small memleaks Max Reitz

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.