On Fri, Jan 08, 2021 at 10:35:33AM +0100, Tim Duesterhus wrote:
> During a configuration check valgrind reports:
> 
>     ==14425== 0 bytes in 106 blocks are definitely lost in loss record 1 of 
> 107
>     ==14425==    at 0x4C2DB8F: malloc (in 
> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
>     ==14425==    by 0x4C2FDEF: realloc (in 
> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
>     ==14425==    by 0x443CFC: hlua_alloc (hlua.c:8662)
>     ==14425==    by 0x5F72B11: luaM_realloc_ (in 
> /usr/lib/x86_64-linux-gnu/liblua5.3.so.0.0.0)
>     ==14425==    by 0x5F78089: luaH_free (in 
> /usr/lib/x86_64-linux-gnu/liblua5.3.so.0.0.0)
>     ==14425==    by 0x5F707D3: sweeplist (in 
> /usr/lib/x86_64-linux-gnu/liblua5.3.so.0.0.0)
>     ==14425==    by 0x5F710D0: luaC_freeallobjects (in 
> /usr/lib/x86_64-linux-gnu/liblua5.3.so.0.0.0)
>     ==14425==    by 0x5F7715D: close_state (in 
> /usr/lib/x86_64-linux-gnu/liblua5.3.so.0.0.0)
>     ==14425==    by 0x443D4C: hlua_deinit (hlua.c:9302)
>     ==14425==    by 0x543F88: deinit (haproxy.c:2742)
>     ==14425==    by 0x5448E7: deinit_and_exit (haproxy.c:2830)
>     ==14425==    by 0x5455D9: init (haproxy.c:2044)
> 
> This is due to Lua calling `hlua_alloc()` with `ptr = NULL` and `nsize = 0`.
> While `realloc` is supposed to be equivalent `free()` if the size is `0` this
> is only required for a non-NULL pointer. Apparently my allocator (or valgrind)
> actually allocates a zero size area if the pointer is NULL, possibly taking up
> some memory for management structures.
> 
> Fix this leak by specifically handling the case where both the pointer and the
> size are `0`.
> 
> This bug appears to have been introduced with the introduction of the
> multi-threaded Lua, thus this fix is specific for 2.4. No backport needed.

Interesting, thanks for catching this and for the fix, Tim!
Now merged (v2).

Willy

Reply via email to