]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
lib: Fix error path memleaks in prefork_create_pool()
authorVolker Lendecke <vl@samba.org>
Sat, 26 Dec 2020 17:22:23 +0000 (18:22 +0100)
committerJeremy Allison <jra@samba.org>
Fri, 8 Jan 2021 20:31:33 +0000 (20:31 +0000)
A few return statements missed the "TALLOC_FREE(pfp);"

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/lib/server_prefork.c

index d0cea7c30c04ce91e8713541eebb186f33d30f47..8fa3cce7746891186610cbe35e082d02e4da3cb9 100644 (file)
@@ -72,14 +72,14 @@ bool prefork_create_pool(TALLOC_CTX *mem_ctx,
        pfp = talloc_zero(mem_ctx, struct prefork_pool);
        if (!pfp) {
                DEBUG(1, ("Out of memory!\n"));
-               return false;
+               goto fail;
        }
        pfp->listen_fd_size = listen_fd_size;
        pfp->listen_fds = talloc_array(pfp, struct pf_listen_fd,
                                       listen_fd_size);
        if (!pfp->listen_fds) {
                DEBUG(1, ("Out of memory!\n"));
-               return false;
+               goto fail;
        }
        for (i = 0; i < listen_fd_size; i++) {
                pfp->listen_fds[i] = listen_fds[i];
@@ -87,7 +87,7 @@ bool prefork_create_pool(TALLOC_CTX *mem_ctx,
                ret = set_blocking(listen_fds[i].fd, false);
                if (ret < 0) {
                        DBG_WARNING("Failed to set sockets to non-blocking!\n");
-                       return false;
+                       goto fail;
                }
        }
        pfp->main_fn = main_fn;
@@ -100,8 +100,7 @@ bool prefork_create_pool(TALLOC_CTX *mem_ctx,
                data_size);
        if (pfp->pool == NULL) {
                DEBUG(1, ("Failed to mmap memory for prefork pool!\n"));
-               talloc_free(pfp);
-               return false;
+               goto fail;
        }
        talloc_set_destructor(pfp, prefork_pool_destructor);
 
@@ -135,12 +134,14 @@ bool prefork_create_pool(TALLOC_CTX *mem_ctx,
        ok = prefork_setup_sigchld_handler(ev_ctx, pfp);
        if (!ok) {
                DEBUG(1, ("Failed to setup SIGCHLD Handler!\n"));
-               talloc_free(pfp);
-               return false;
+               goto fail;
        }
 
        *pf_pool = pfp;
        return true;
+fail:
+       TALLOC_FREE(pfp);
+       return false;
 }
 
 /* Provide the new max children number in new_max