[libvirt] [PATCH 02/14] rpc: Fix memory leaks @virnetserverclient

John Ferlan jferlan at redhat.com
Thu Dec 21 11:50:52 UTC 2017



On 12/21/2017 06:32 AM, Marc Hartmayer wrote:
> On Fri, Dec 15, 2017 at 01:14 PM +0100, John Ferlan <jferlan at redhat.com> wrote:
>> On 12/12/2017 06:36 AM, Marc Hartmayer wrote:
>>> Direct leak of 104 byte(s) in 1 object(s) allocated from:
>>>     #0 0x7f904bfbe12b  (/lib64/liblsan.so.0+0xe12b)
>>>     #1 0x7f904ba0ad67 in virAlloc ../../src/util/viralloc.c:144
>>>     #2 0x7f904bbc11a4 in virNetMessageNew ../../src/rpc/virnetmessage.c:42
>>>     #3 0x7f904bbb8e77 in virNetServerClientNewInternal ../../src/rpc/virnetserverclient.c:392
>>>     #4 0x7f904bbb9921 in virNetServerClientNew ../../src/rpc/virnetserverclient.c:440
>>>     #5 0x402ce5 in testIdentity ../../tests/virnetserverclienttest.c:55
>>>     #6 0x403bed in virTestRun ../../tests/testutils.c:180
>>>     #7 0x402c1e in mymain ../../tests/virnetserverclienttest.c:146
>>>     #8 0x404c80 in virTestMain ../../tests/testutils.c:1119
>>>     #9 0x4030d5 in main ../../tests/virnetserverclienttest.c:152
>>>     #10 0x7f9047f7f889 in __libc_start_main (/lib64/libc.so.6+0x20889)
>>>
>>> Indirect leak of 4 byte(s) in 1 object(s) allocated from:
>>>     #0 0x7f904bfbe12b  (/lib64/liblsan.so.0+0xe12b)
>>>     #1 0x7f904ba0adc7 in virAllocN ../../src/util/viralloc.c:191
>>>     #2 0x7f904bbb8ec7 in virNetServerClientNewInternal ../../src/rpc/virnetserverclient.c:395
>>>     #3 0x7f904bbb9921 in virNetServerClientNew ../../src/rpc/virnetserverclient.c:440
>>>     #4 0x402ce5 in testIdentity ../../tests/virnetserverclienttest.c:55
>>>     #5 0x403bed in virTestRun ../../tests/testutils.c:180
>>>     #6 0x402c1e in mymain ../../tests/virnetserverclienttest.c:146
>>>     #7 0x404c80 in virTestMain ../../tests/testutils.c:1119
>>>     #8 0x4030d5 in main ../../tests/virnetserverclienttest.c:152
>>>     #9 0x7f9047f7f889 in __libc_start_main (/lib64/libc.so.6+0x20889)
>>>
>>> SUMMARY: LeakSanitizer: 108 byte(s) leaked in 2 allocation(s).
>>>
>>> Signed-off-by: Marc Hartmayer <mhartmay at linux.vnet.ibm.com>
>>> Reviewed-by: Boris Fiuczynski <fiuczy at linux.vnet.ibm.com>
>>> ---
>>>  src/rpc/virnetserverclient.c | 3 +++
>>>  1 file changed, 3 insertions(+)
>>>
>>> diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
>>> index 6e086b7b4e2b..b454a3ff6992 100644
>>> --- a/src/rpc/virnetserverclient.c
>>> +++ b/src/rpc/virnetserverclient.c
>>> @@ -948,6 +948,9 @@ void virNetServerClientDispose(void *obj)
>>>      virObjectUnref(client->tlsCtxt);
>>>  #endif
>>>      virObjectUnref(client->sock);
>>> +
>>> +    virNetMessageFree(client->rx);
>>> +    virNetMessageFree(client->tx);
>>
>> Makes me curious why virNetServerClientClose isn't doing the Free for
>> the rx/tx.  Oh, I see, the test program isn't calling it.
>>
>> I think this is the right idea, but the issue is in the test program
>> doing the Unref before calling virNetServerClientClose.
> 
> Yes. Will add an patch for this. Should I remove this patch then?
> 

Yes probably should have been explicit - the R-B below was conditional
on altering this patch to call virNetServerClientClose in the test
program instead of in virNetServerClientDispose.

John
>>
>> If you see how other tests/code handle this, the client usually gets
>> added to the net server [n]clients list (virNetServerAddClient) and
>> later when netserver is disposed the nclients is perused and calls
>> virNetServerClientClose prior to the Unref as well for each client.
>>
>> So if you make the right call in tests/virnetserverclienttest.c, then
>> you have my
>>
>> Reviewed-by: John Ferlan <jferlan at redhat.com>
>>
>> John
>>
>>>  }
>>>
>>>
>>>
>>
> --
> Beste Grüße / Kind regards
>    Marc Hartmayer
> 
> IBM Deutschland Research & Development GmbH
> Vorsitzende des Aufsichtsrats: Martina Koederitz
> Geschäftsführung: Dirk Wittkopp
> Sitz der Gesellschaft: Böblingen
> Registergericht: Amtsgericht Stuttgart, HRB 243294
> 




More information about the libvir-list mailing list