qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev
@ 2014-08-18  6:46 Chen Fan
  2014-08-18  6:46 ` [Qemu-devel] [RESEND v2 1/3] query-memdev: fix potential memory leaks Chen Fan
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Chen Fan @ 2014-08-18  6:46 UTC (permalink / raw)
  To: qemu-devel, qemu-trivial

when using valgrind to test the command "query memdev", I had
found some memory leaks. the test result:

==13802== 4 bytes in 1 blocks are definitely lost in loss record 125 of 8,508
==13802==    at 0x4A08934: malloc (vg_replace_malloc.c:291)
==13802==    by 0x4A08AA8: realloc (vg_replace_malloc.c:687)
==13802==    by 0x64C5736: g_realloc (in /usr/lib64/libglib-2.0.so.0.3400.2)
==13802==    by 0x64DE226: ??? (in /usr/lib64/libglib-2.0.so.0.3400.2)
==13802==    by 0x64DE279: g_string_sized_new (in /usr/lib64/libglib-2.0.so.0.3400.2)
==13802==    by 0x47CFBB: string_output_visitor_new (string-output-visitor.c:341)
==13802==    by 0x3F456F: object_property_get_uint16List (object.c:970)
==13802==    by 0x1E8764: query_memdev (numa.c:361)
==13802==    by 0x3F3248: object_child_foreach (object.c:686)
==13802==    by 0x1E9141: qmp_query_memdev (numa.c:389)
==13802==    by 0x2D79A0: qmp_marshal_input_query_memdev (qmp-marshal.c:5057)
==13802==    by 0x1DD7D7: handle_qmp_command (monitor.c:5038)

==15046== 48 (16 direct, 32 indirect) bytes in 1 blocks are definitely lost in loss record 4,722 of 8,549
==15046==    at 0x4A08934: malloc (vg_replace_malloc.c:291)
==15046==    by 0x64C541D: ??? (in /usr/lib64/libglib-2.0.so.0.3400.2)
==15046==    by 0x64C56E6: g_malloc0 (in /usr/lib64/libglib-2.0.so.0.3400.2)
==15046==    by 0x1E868C: query_memdev (numa.c:325)
==15046==    by 0x3F3258: object_child_foreach (object.c:686)
==15046==    by 0x1E9141: qmp_query_memdev (numa.c:389)
==15046==    by 0x2DDFF3: hmp_info_memdev (hmp.c:1687)
==15046==    by 0x1E4B08: handle_user_command (monitor.c:4119)
==15046==    by 0x1E4E7A: monitor_command_cb (monitor.c:5156)
==15046==    by 0x496056: readline_handle_byte (readline.c:391)
==15046==    by 0x1E4BCE: monitor_read (monitor.c:5139)
==15046==    by 0x2BCDEF: fd_chr_read (qemu-char.c:213)


Chen Fan (3):
  query-memdev: fix potential memory leaks
  qom/object.c: fix string_output_get_string() memory leak
  hmp: fix MemdevList memory leak

 hmp.c        |  8 ++++++--
 numa.c       | 15 +++++++--------
 qom/object.c | 12 ++++++++++--
 3 files changed, 23 insertions(+), 12 deletions(-)

-- 
1.9.3

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

* [Qemu-devel] [RESEND v2 1/3] query-memdev: fix potential memory leaks
  2014-08-18  6:46 [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev Chen Fan
@ 2014-08-18  6:46 ` Chen Fan
  2014-08-18  6:46 ` [Qemu-devel] [RESEND v2 2/3] qom/object.c: fix string_output_get_string() memory leak Chen Fan
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Chen Fan @ 2014-08-18  6:46 UTC (permalink / raw)
  To: qemu-devel, qemu-trivial

Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Reviewed-by: Hu Tao <hutao@cn.fujitsu.com>

---
 numa.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/numa.c b/numa.c
index c78cec9..aa772aa 100644
--- a/numa.c
+++ b/numa.c
@@ -318,10 +318,11 @@ void memory_region_allocate_system_memory(MemoryRegion *mr, Object *owner,
 static int query_memdev(Object *obj, void *opaque)
 {
     MemdevList **list = opaque;
+    MemdevList *m = NULL;
     Error *err = NULL;
 
     if (object_dynamic_cast(obj, TYPE_MEMORY_BACKEND)) {
-        MemdevList *m = g_malloc0(sizeof(*m));
+        m = g_malloc0(sizeof(*m));
 
         m->value = g_malloc0(sizeof(*m->value));
 
@@ -369,6 +370,9 @@ static int query_memdev(Object *obj, void *opaque)
 
     return 0;
 error:
+    g_free(m->value);
+    g_free(m);
+
     return -1;
 }
 
-- 
1.9.3

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

* [Qemu-devel] [RESEND v2 2/3] qom/object.c: fix string_output_get_string() memory leak
  2014-08-18  6:46 [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev Chen Fan
  2014-08-18  6:46 ` [Qemu-devel] [RESEND v2 1/3] query-memdev: fix potential memory leaks Chen Fan
@ 2014-08-18  6:46 ` Chen Fan
  2014-08-18  6:46 ` [Qemu-devel] [RESEND v2 3/3] hmp: fix MemdevList " Chen Fan
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Chen Fan @ 2014-08-18  6:46 UTC (permalink / raw)
  To: qemu-devel, qemu-trivial

string_output_get_string() uses g_string_free(str, false) to
transfer the 'str' pointer to callers and never free it.

Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Reviewed-by: Hu Tao <hutao@cn.fujitsu.com>

---
 hmp.c        |  6 ++++--
 qom/object.c | 12 ++++++++++--
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/hmp.c b/hmp.c
index 4d1838e..ba40c75 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1687,6 +1687,7 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict)
     MemdevList *memdev_list = qmp_query_memdev(&err);
     MemdevList *m = memdev_list;
     StringOutputVisitor *ov;
+    char *str;
     int i = 0;
 
 
@@ -1704,9 +1705,10 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict)
                        m->value->prealloc ? "true" : "false");
         monitor_printf(mon, "  policy: %s\n",
                        HostMemPolicy_lookup[m->value->policy]);
-        monitor_printf(mon, "  host nodes: %s\n",
-                       string_output_get_string(ov));
+        str = string_output_get_string(ov);
+        monitor_printf(mon, "  host nodes: %s\n", str);
 
+        g_free(str);
         string_output_visitor_cleanup(ov);
         m = m->next;
         i++;
diff --git a/qom/object.c b/qom/object.c
index 0e8267b..e5aed60 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -948,14 +948,18 @@ int object_property_get_enum(Object *obj, const char *name,
 {
     StringOutputVisitor *sov;
     StringInputVisitor *siv;
+    char *str;
     int ret;
 
     sov = string_output_visitor_new(false);
     object_property_get(obj, string_output_get_visitor(sov), name, errp);
-    siv = string_input_visitor_new(string_output_get_string(sov));
+    str = string_output_get_string(sov);
+    siv = string_input_visitor_new(str);
     string_output_visitor_cleanup(sov);
     visit_type_enum(string_input_get_visitor(siv),
                     &ret, strings, NULL, name, errp);
+
+    g_free(str);
     string_input_visitor_cleanup(siv);
 
     return ret;
@@ -966,13 +970,17 @@ void object_property_get_uint16List(Object *obj, const char *name,
 {
     StringOutputVisitor *ov;
     StringInputVisitor *iv;
+    char *str;
 
     ov = string_output_visitor_new(false);
     object_property_get(obj, string_output_get_visitor(ov),
                         name, errp);
-    iv = string_input_visitor_new(string_output_get_string(ov));
+    str = string_output_get_string(ov);
+    iv = string_input_visitor_new(str);
     visit_type_uint16List(string_input_get_visitor(iv),
                           list, NULL, errp);
+
+    g_free(str);
     string_output_visitor_cleanup(ov);
     string_input_visitor_cleanup(iv);
 }
-- 
1.9.3

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

* [Qemu-devel] [RESEND v2 3/3] hmp: fix MemdevList memory leak
  2014-08-18  6:46 [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev Chen Fan
  2014-08-18  6:46 ` [Qemu-devel] [RESEND v2 1/3] query-memdev: fix potential memory leaks Chen Fan
  2014-08-18  6:46 ` [Qemu-devel] [RESEND v2 2/3] qom/object.c: fix string_output_get_string() memory leak Chen Fan
@ 2014-08-18  6:46 ` Chen Fan
  2014-08-25  3:37 ` [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev chen.fan.fnst
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Chen Fan @ 2014-08-18  6:46 UTC (permalink / raw)
  To: qemu-devel, qemu-trivial

the memdev_list in hmp_info_memdev() is never freed.
so we use existent method qapi_free_MemdevList() to free it.
and also we can use qapi_free_MemdevList() to replace list loops
to clean up the memdev list in error path.

Signed-off-by: Chen Fan <chen.fan.fnst@cn.fujitsu.com>
Reviewed-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Reviewed-by: Hu Tao <hutao@cn.fujitsu.com>

---
 hmp.c  | 2 ++
 numa.c | 9 ++-------
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/hmp.c b/hmp.c
index ba40c75..40a90da 100644
--- a/hmp.c
+++ b/hmp.c
@@ -1715,4 +1715,6 @@ void hmp_info_memdev(Monitor *mon, const QDict *qdict)
     }
 
     monitor_printf(mon, "\n");
+
+    qapi_free_MemdevList(memdev_list);
 }
diff --git a/numa.c b/numa.c
index aa772aa..f07149b 100644
--- a/numa.c
+++ b/numa.c
@@ -379,7 +379,7 @@ error:
 MemdevList *qmp_query_memdev(Error **errp)
 {
     Object *obj;
-    MemdevList *list = NULL, *m;
+    MemdevList *list = NULL;
 
     obj = object_resolve_path("/objects", NULL);
     if (obj == NULL) {
@@ -393,11 +393,6 @@ MemdevList *qmp_query_memdev(Error **errp)
     return list;
 
 error:
-    while (list) {
-        m = list;
-        list = list->next;
-        g_free(m->value);
-        g_free(m);
-    }
+    qapi_free_MemdevList(list);
     return NULL;
 }
-- 
1.9.3

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

* Re: [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev
  2014-08-18  6:46 [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev Chen Fan
                   ` (2 preceding siblings ...)
  2014-08-18  6:46 ` [Qemu-devel] [RESEND v2 3/3] hmp: fix MemdevList " Chen Fan
@ 2014-08-25  3:37 ` chen.fan.fnst
  2014-08-28  1:17 ` chen.fan.fnst
  2014-08-29 16:29 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
  5 siblings, 0 replies; 8+ messages in thread
From: chen.fan.fnst @ 2014-08-25  3:37 UTC (permalink / raw)
  To: qemu-devel@nongnu.org; +Cc: qemu-trivial@nongnu.org

ping...

This patches have been reviewed-by, only need someone ack it.

Thanks,
Chen

On Mon, 2014-08-18 at 14:46 +0800, Chen Fan wrote: 
> when using valgrind to test the command "query memdev", I had
> found some memory leaks. the test result:
> 
> ==13802== 4 bytes in 1 blocks are definitely lost in loss record 125 of 8,508
> ==13802==    at 0x4A08934: malloc (vg_replace_malloc.c:291)
> ==13802==    by 0x4A08AA8: realloc (vg_replace_malloc.c:687)
> ==13802==    by 0x64C5736: g_realloc (in /usr/lib64/libglib-2.0.so.0.3400.2)
> ==13802==    by 0x64DE226: ??? (in /usr/lib64/libglib-2.0.so.0.3400.2)
> ==13802==    by 0x64DE279: g_string_sized_new (in /usr/lib64/libglib-2.0.so.0.3400.2)
> ==13802==    by 0x47CFBB: string_output_visitor_new (string-output-visitor.c:341)
> ==13802==    by 0x3F456F: object_property_get_uint16List (object.c:970)
> ==13802==    by 0x1E8764: query_memdev (numa.c:361)
> ==13802==    by 0x3F3248: object_child_foreach (object.c:686)
> ==13802==    by 0x1E9141: qmp_query_memdev (numa.c:389)
> ==13802==    by 0x2D79A0: qmp_marshal_input_query_memdev (qmp-marshal.c:5057)
> ==13802==    by 0x1DD7D7: handle_qmp_command (monitor.c:5038)
> 
> ==15046== 48 (16 direct, 32 indirect) bytes in 1 blocks are definitely lost in loss record 4,722 of 8,549
> ==15046==    at 0x4A08934: malloc (vg_replace_malloc.c:291)
> ==15046==    by 0x64C541D: ??? (in /usr/lib64/libglib-2.0.so.0.3400.2)
> ==15046==    by 0x64C56E6: g_malloc0 (in /usr/lib64/libglib-2.0.so.0.3400.2)
> ==15046==    by 0x1E868C: query_memdev (numa.c:325)
> ==15046==    by 0x3F3258: object_child_foreach (object.c:686)
> ==15046==    by 0x1E9141: qmp_query_memdev (numa.c:389)
> ==15046==    by 0x2DDFF3: hmp_info_memdev (hmp.c:1687)
> ==15046==    by 0x1E4B08: handle_user_command (monitor.c:4119)
> ==15046==    by 0x1E4E7A: monitor_command_cb (monitor.c:5156)
> ==15046==    by 0x496056: readline_handle_byte (readline.c:391)
> ==15046==    by 0x1E4BCE: monitor_read (monitor.c:5139)
> ==15046==    by 0x2BCDEF: fd_chr_read (qemu-char.c:213)
> 
> 
> Chen Fan (3):
>   query-memdev: fix potential memory leaks
>   qom/object.c: fix string_output_get_string() memory leak
>   hmp: fix MemdevList memory leak
> 
>  hmp.c        |  8 ++++++--
>  numa.c       | 15 +++++++--------
>  qom/object.c | 12 ++++++++++--
>  3 files changed, 23 insertions(+), 12 deletions(-)
> 


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

* Re: [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev
  2014-08-18  6:46 [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev Chen Fan
                   ` (3 preceding siblings ...)
  2014-08-25  3:37 ` [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev chen.fan.fnst
@ 2014-08-28  1:17 ` chen.fan.fnst
  2014-08-29 16:29 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
  5 siblings, 0 replies; 8+ messages in thread
From: chen.fan.fnst @ 2014-08-28  1:17 UTC (permalink / raw)
  To: qemu-devel@nongnu.org; +Cc: qemu-trivial@nongnu.org, qemu-stable@nongnu.org

ping ?

On Mon, 2014-08-18 at 14:46 +0800, Chen Fan wrote: 
> when using valgrind to test the command "query memdev", I had
> found some memory leaks. the test result:
> 
> ==13802== 4 bytes in 1 blocks are definitely lost in loss record 125 of 8,508
> ==13802==    at 0x4A08934: malloc (vg_replace_malloc.c:291)
> ==13802==    by 0x4A08AA8: realloc (vg_replace_malloc.c:687)
> ==13802==    by 0x64C5736: g_realloc (in /usr/lib64/libglib-2.0.so.0.3400.2)
> ==13802==    by 0x64DE226: ??? (in /usr/lib64/libglib-2.0.so.0.3400.2)
> ==13802==    by 0x64DE279: g_string_sized_new (in /usr/lib64/libglib-2.0.so.0.3400.2)
> ==13802==    by 0x47CFBB: string_output_visitor_new (string-output-visitor.c:341)
> ==13802==    by 0x3F456F: object_property_get_uint16List (object.c:970)
> ==13802==    by 0x1E8764: query_memdev (numa.c:361)
> ==13802==    by 0x3F3248: object_child_foreach (object.c:686)
> ==13802==    by 0x1E9141: qmp_query_memdev (numa.c:389)
> ==13802==    by 0x2D79A0: qmp_marshal_input_query_memdev (qmp-marshal.c:5057)
> ==13802==    by 0x1DD7D7: handle_qmp_command (monitor.c:5038)
> 
> ==15046== 48 (16 direct, 32 indirect) bytes in 1 blocks are definitely lost in loss record 4,722 of 8,549
> ==15046==    at 0x4A08934: malloc (vg_replace_malloc.c:291)
> ==15046==    by 0x64C541D: ??? (in /usr/lib64/libglib-2.0.so.0.3400.2)
> ==15046==    by 0x64C56E6: g_malloc0 (in /usr/lib64/libglib-2.0.so.0.3400.2)
> ==15046==    by 0x1E868C: query_memdev (numa.c:325)
> ==15046==    by 0x3F3258: object_child_foreach (object.c:686)
> ==15046==    by 0x1E9141: qmp_query_memdev (numa.c:389)
> ==15046==    by 0x2DDFF3: hmp_info_memdev (hmp.c:1687)
> ==15046==    by 0x1E4B08: handle_user_command (monitor.c:4119)
> ==15046==    by 0x1E4E7A: monitor_command_cb (monitor.c:5156)
> ==15046==    by 0x496056: readline_handle_byte (readline.c:391)
> ==15046==    by 0x1E4BCE: monitor_read (monitor.c:5139)
> ==15046==    by 0x2BCDEF: fd_chr_read (qemu-char.c:213)
> 
> 
> Chen Fan (3):
>   query-memdev: fix potential memory leaks
>   qom/object.c: fix string_output_get_string() memory leak
>   hmp: fix MemdevList memory leak
> 
>  hmp.c        |  8 ++++++--
>  numa.c       | 15 +++++++--------
>  qom/object.c | 12 ++++++++++--
>  3 files changed, 23 insertions(+), 12 deletions(-)
> 


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

* Re: [Qemu-devel] [Qemu-trivial] [RESEND v2 0/3] Fix some memory leaks about query memdev
  2014-08-18  6:46 [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev Chen Fan
                   ` (4 preceding siblings ...)
  2014-08-28  1:17 ` chen.fan.fnst
@ 2014-08-29 16:29 ` Michael Tokarev
  2014-09-01  1:41   ` chen.fan.fnst
  5 siblings, 1 reply; 8+ messages in thread
From: Michael Tokarev @ 2014-08-29 16:29 UTC (permalink / raw)
  To: Chen Fan, qemu-devel, qemu-trivial

18.08.2014 10:46, Chen Fan wrote:
> when using valgrind to test the command "query memdev", I had
> found some memory leaks. the test result:
...

Applied all 3 to -trivial.  Usually these are not really trivial.
Please note that your 2nd patch - "qom/object.c: fix string_output_get_string()
memory leak" - also touches hmp.c (which has a maintainer), but you
didn't mention this in patch description.  I've added it.

Thanks,

/mjt

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

* Re: [Qemu-devel] [Qemu-trivial] [RESEND v2 0/3] Fix some memory leaks about query memdev
  2014-08-29 16:29 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
@ 2014-09-01  1:41   ` chen.fan.fnst
  0 siblings, 0 replies; 8+ messages in thread
From: chen.fan.fnst @ 2014-09-01  1:41 UTC (permalink / raw)
  To: Michael Tokarev; +Cc: qemu-trivial@nongnu.org, qemu-devel@nongnu.org

On Fri, 2014-08-29 at 20:29 +0400, Michael Tokarev wrote: 
> 18.08.2014 10:46, Chen Fan wrote:
> > when using valgrind to test the command "query memdev", I had
> > found some memory leaks. the test result:
> ...
> 
> Applied all 3 to -trivial.  Usually these are not really trivial.
> Please note that your 2nd patch - "qom/object.c: fix string_output_get_string()
> memory leak" - also touches hmp.c (which has a maintainer), but you
> didn't mention this in patch description.  I've added it.
Thanks,

Chen


> 
> Thanks,
> 
> /mjt


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

end of thread, other threads:[~2014-09-01  1:42 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-18  6:46 [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev Chen Fan
2014-08-18  6:46 ` [Qemu-devel] [RESEND v2 1/3] query-memdev: fix potential memory leaks Chen Fan
2014-08-18  6:46 ` [Qemu-devel] [RESEND v2 2/3] qom/object.c: fix string_output_get_string() memory leak Chen Fan
2014-08-18  6:46 ` [Qemu-devel] [RESEND v2 3/3] hmp: fix MemdevList " Chen Fan
2014-08-25  3:37 ` [Qemu-devel] [RESEND v2 0/3] Fix some memory leaks about query memdev chen.fan.fnst
2014-08-28  1:17 ` chen.fan.fnst
2014-08-29 16:29 ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
2014-09-01  1:41   ` chen.fan.fnst

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).