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

