]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
atexit.c: fix memory leak of fr_atexit_global and unsigned return -1 in disarm
authorAlexander Bainbridge-Sedivy <alex.bainbridge@inkbridge.io>
Fri, 8 May 2026 14:44:03 +0000 (10:44 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 27 May 2026 17:38:32 +0000 (13:38 -0400)
src/lib/util/atexit.c

index 47f0261a68d4435fc31f0afb4871471a5ec49a5b..bce89e6227bf06fa14d7a8ac276465d94adee505 100644 (file)
@@ -190,7 +190,10 @@ int fr_atexit_global_setup(void)
 
 #ifdef HAVE_PTHREADS
        fr_atexit_threads = talloc_zero(NULL, fr_atexit_list_t);
-       if (unlikely(!fr_atexit_threads)) return -1;
+       if (unlikely(!fr_atexit_threads)) {
+               TALLOC_FREE(fr_atexit_global);
+               return -1;
+       }
 
        ATEXIT_DEBUG("%s - Alloced threads destructor list %p", __FUNCTION__, fr_atexit_threads);
 
@@ -581,7 +584,7 @@ unsigned int fr_atexit_thread_local_disarm(bool uctx_scope, fr_atexit_t func, vo
        fr_atexit_entry_t       *e = NULL;
        unsigned int            count = 0;
 
-       if (!fr_atexit_thread_local) return -1;
+       if (!fr_atexit_thread_local) return 0;
 
        while ((e = fr_dlist_next(&fr_atexit_thread_local->head, e))) {
                fr_atexit_entry_t *disarm;