]> git.ipfire.org Git - thirdparty/curl.git/commit
memdebug: close debug logfile explicitly on exit
authorJay Satiro <raysatiro@yahoo.com>
Wed, 17 Feb 2021 22:46:16 +0000 (17:46 -0500)
committerJay Satiro <raysatiro@yahoo.com>
Sat, 20 Feb 2021 19:40:24 +0000 (14:40 -0500)
commiteb36c03e83ecc110bb14480fca911ef45621f24a
treec878e8d308bd7fff22e7d9c628cc860b59129b3d
parent09363500b9e161670b6bd084cc57bff75d32fc02
memdebug: close debug logfile explicitly on exit

- Use atexit to register a dbg cleanup function that closes the logfile.

LeakSantizier (LSAN) calls _exit() instead of exit() when a leak is
detected on exit so the logfile must be closed explicitly or data could
be lost. Though _exit() does not call atexit handlers such as this,
LSAN's call to _exit() comes after the atexit handlers are called.

Prior to this change the logfile was not explicitly closed so it was
possible that if LSAN detected a leak and called _exit (which does
not flush or close files like exit) then the logfile could be missing
data. That could then cause curl's memanalyze to report false leaks
(eg a malloc was recorded to the logfile but the corresponding free was
discarded from the buffer instead of written to the logfile, then
memanalyze reports that as a leak).

Ref: https://github.com/google/sanitizers/issues/1374

Bug: https://github.com/curl/curl/pull/6591#issuecomment-780396541

Closes https://github.com/curl/curl/pull/6620
lib/memdebug.c