Patchwork virtio-9p: Fix a memory leak

login
register
mail settings
Submitter Pedro Scarapicchia Junior
Date May 6, 2011, 7:05 p.m.
Message ID <1304708747-3692-1-git-send-email-pedro.scarapiccha@br.flextronics.com>
Download mbox | patch
Permalink /patch/94429/
State New
Headers show

Comments

Pedro Scarapicchia Junior - May 6, 2011, 7:05 p.m.
At v9fs_walk_complete(), the memory allocated at v9fs_walk() is not being
released leading system to crash due out of memory.

This patch releases structure V9fsWalkState after v9fs_walk is complete.

Signed-off-by: Pedro Scarapicchia Junior <pedro.scarapiccha@br.flextronics.com>
---
 hw/9pfs/virtio-9p.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
Stefan Hajnoczi - May 7, 2011, 8:34 a.m.
On Fri, May 6, 2011 at 8:05 PM, Pedro Scarapicchia Junior
<pedrinho.rep51@gmail.com> wrote:
> At v9fs_walk_complete(), the memory allocated at v9fs_walk() is not being
> released leading system to crash due out of memory.
>
> This patch releases structure V9fsWalkState after v9fs_walk is complete.
>
> Signed-off-by: Pedro Scarapicchia Junior <pedro.scarapiccha@br.flextronics.com>
> ---
>  hw/9pfs/virtio-9p.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)

Thanks for this patch.  I suggest CCing Venkateswararao Jujjuri (JV)
<jvrao@linux.vnet.ibm.com>, the virtio-9p maintainer (see MAINTAINERS
file), on future patches so he can pick them up quickly.

Stefan
Stefan Weil - May 7, 2011, 8:56 a.m.
Am 07.05.2011 10:34, schrieb Stefan Hajnoczi:
> On Fri, May 6, 2011 at 8:05 PM, Pedro Scarapicchia Junior
> <pedrinho.rep51@gmail.com> wrote:
>> At v9fs_walk_complete(), the memory allocated at v9fs_walk() is not being
>> released leading system to crash due out of memory.
>>
>> This patch releases structure V9fsWalkState after v9fs_walk is complete.
>>
>> Signed-off-by: Pedro Scarapicchia Junior 
>> <pedro.scarapiccha@br.flextronics.com>
>> ---
>>  hw/9pfs/virtio-9p.c |    2 ++
>>  1 files changed, 2 insertions(+), 0 deletions(-)
>
> Thanks for this patch. I suggest CCing Venkateswararao Jujjuri (JV)
> <jvrao@linux.vnet.ibm.com>, the virtio-9p maintainer (see MAINTAINERS
> file), on future patches so he can pick them up quickly.
>
> Stefan

Releasing the memory in v9fs_walk() were it was allocated
would be cleaner and easier to review. Is this not possible?

Stefan W.
Pedro Scarapicchia Junior - May 7, 2011, 8:27 p.m.
Hi Stefan,

Thanks for the comment.

I believe that it is possible to release the memory at v9fs_walk. However
v9fs_walk_complete() is called from two another
functions: v9fs_walk_post_newfid_lstat()  and  v9fs_walk_post_oldfid_lstat().
Placing qemu_free at end of v9fs_walk_complete() solve memory leak in both
cases.

Venkateswararao, what's your opinion?

Best regards,

Pedro

On Sat, May 7, 2011 at 5:56 AM, Stefan Weil <weil@mail.berlios.de> wrote:

> Am 07.05.2011 10:34, schrieb Stefan Hajnoczi:
>
>  On Fri, May 6, 2011 at 8:05 PM, Pedro Scarapicchia Junior
>> <pedrinho.rep51@gmail.com> wrote:
>>
>>> At v9fs_walk_complete(), the memory allocated at v9fs_walk() is not being
>>> released leading system to crash due out of memory.
>>>
>>> This patch releases structure V9fsWalkState after v9fs_walk is complete.
>>>
>>> Signed-off-by: Pedro Scarapicchia Junior <
>>> pedro.scarapiccha@br.flextronics.com>
>>> ---
>>>  hw/9pfs/virtio-9p.c |    2 ++
>>>  1 files changed, 2 insertions(+), 0 deletions(-)
>>>
>>
>> Thanks for this patch. I suggest CCing Venkateswararao Jujjuri (JV)
>> <jvrao@linux.vnet.ibm.com>, the virtio-9p maintainer (see MAINTAINERS
>> file), on future patches so he can pick them up quickly.
>>
>> Stefan
>>
>
> Releasing the memory in v9fs_walk() were it was allocated
> would be cleaner and easier to review. Is this not possible?
>
> Stefan W.
>
>
>
jvrao - May 8, 2011, 5:40 p.m.
On 05/07/2011 01:27 PM, Pedro Scarapicchia Junior wrote:
> Hi Stefan,
>
> Thanks for the comment.
>
> I believe that it is possible to release the memory at v9fs_walk. 
> However v9fs_walk_complete() is called from two another 
> functions: v9fs_walk_post_newfid_lstat() 
>  and  v9fs_walk_post_oldfid_lstat(). Placing qemu_free at end 
> of v9fs_walk_complete() solve memory leak in both cases.
>
> Venkateswararao, what's your opinion?
I agree with Pedro. Given the state machine model the v9fs_walk() 
returns from multiple places.
We can take this patch for now. A new patch set is getting brewed 
converting this whole method with
coroutines + glib thread pools. That will replace all these *post* 
functions with more of a
readable format. Again thanks for the patch.

- JV
>
> Best regards,
>
> Pedro
>
> On Sat, May 7, 2011 at 5:56 AM, Stefan Weil <weil@mail.berlios.de 
> <mailto:weil@mail.berlios.de>> wrote:
>
>     Am 07.05.2011 10:34, schrieb Stefan Hajnoczi:
>
>         On Fri, May 6, 2011 at 8:05 PM, Pedro Scarapicchia Junior
>         <pedrinho.rep51@gmail.com <mailto:pedrinho.rep51@gmail.com>>
>         wrote:
>
>             At v9fs_walk_complete(), the memory allocated at
>             v9fs_walk() is not being
>             released leading system to crash due out of memory.
>
>             This patch releases structure V9fsWalkState after
>             v9fs_walk is complete.
>
>             Signed-off-by: Pedro Scarapicchia Junior
>             <pedro.scarapiccha@br.flextronics.com
>             <mailto:pedro.scarapiccha@br.flextronics.com>>
>             ---
>              hw/9pfs/virtio-9p.c |    2 ++
>              1 files changed, 2 insertions(+), 0 deletions(-)
>
>
>         Thanks for this patch. I suggest CCing Venkateswararao Jujjuri
>         (JV)
>         <jvrao@linux.vnet.ibm.com <mailto:jvrao@linux.vnet.ibm.com>>,
>         the virtio-9p maintainer (see MAINTAINERS
>         file), on future patches so he can pick them up quickly.
>
>         Stefan
>
>
>     Releasing the memory in v9fs_walk() were it was allocated
>     would be cleaner and easier to review. Is this not possible?
>
>     Stefan W.
>
>
>

Patch

diff --git a/hw/9pfs/virtio-9p.c b/hw/9pfs/virtio-9p.c
index b5fc52b..b1da2b7 100644
--- a/hw/9pfs/virtio-9p.c
+++ b/hw/9pfs/virtio-9p.c
@@ -1490,6 +1490,8 @@  static void v9fs_walk_complete(V9fsState *s, V9fsWalkState *vs, int err)
         qemu_free(vs->wnames);
         qemu_free(vs->qids);
     }
+
+    qemu_free(vs);
 }
 
 static void v9fs_walk_marshal(V9fsWalkState *vs)