s3:libnet: Fix memory leak in libnet_join_connect_dc_ipc()
authorAndreas Schneider <asn@samba.org>
Thu, 23 Nov 2023 14:21:49 +0000 (15:21 +0100)
committerVolker Lendecke <vl@samba.org>
Mon, 29 Apr 2024 08:43:32 +0000 (08:43 +0000)
Direct leak of 885 byte(s) in 1 object(s) allocated from:
    #0 0x7f261b8dc03f in malloc (/lib64/libasan.so.8+0xdc03f) (BuildId: 3e1694ad218c99a8b1b69231666a27df63cf19d0)
    #1 0x7f261b2c2bc2 in __talloc_with_prefix ../../lib/talloc/talloc.c:783
    #2 0x7f261b2c543c in _talloc_pool ../../lib/talloc/talloc.c:838
    #3 0x7f261b2c543c in _talloc_pooled_object ../../lib/talloc/talloc.c:906
    #4 0x7f261a69cac9 in __tevent_req_create ../../lib/tevent/tevent_req.c:98
    #5 0x7f261a75bf55 in cli_full_connection_creds_send ../../source3/libsmb/cliconnect.c:3455
    #6 0x7f261a75c4b7 in cli_full_connection_creds ../../source3/libsmb/cliconnect.c:3818
    #7 0x7f261b70d39f in libnet_join_connect_dc_ipc ../../source3/libnet/libnet_join.c:1146
    #8 0x7f261b715794 in libnet_join_lookup_dc_rpc ../../source3/libnet/libnet_join.c:1188
    #9 0x7f261b715794 in libnet_DomainJoin ../../source3/libnet/libnet_join.c:2812
    #10 0x7f261b715794 in libnet_Join ../../source3/libnet/libnet_join.c:3040
    #11 0x555bd93671ea in net_ads_join ../../source3/utils/net_ads.c:1855
    #12 0x555bd9415ca9 in net_join ../../source3/utils/net_join.c:45
    #13 0x555bd940b972 in net_run_function ../../source3/utils/net_util.c:464
    #14 0x555bd9363129 in main ../../source3/utils/net.c:1372
    #15 0x7f2616a281af in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/libnet/libnet_join.c

index b8c7256bd1674ab7e828128aee389cbf4176acca..89e5239fd9e470ceaf65d0b59502ce9519c7013d 100644 (file)
@@ -1110,7 +1110,8 @@ static bool libnet_join_joindomain_store_secrets(TALLOC_CTX *mem_ctx,
  Connect dc's IPC$ share
 ****************************************************************/
 
-static NTSTATUS libnet_join_connect_dc_ipc(const char *dc,
+static NTSTATUS libnet_join_connect_dc_ipc(TALLOC_CTX *mem_ctx,
+                                          const char *dc,
                                           const char *user,
                                           const char *domain,
                                           const char *pass,
@@ -1143,7 +1144,7 @@ static NTSTATUS libnet_join_connect_dc_ipc(const char *dc,
                return NT_STATUS_NO_MEMORY;
        }
 
-       status = cli_full_connection_creds(NULL,
+       status = cli_full_connection_creds(mem_ctx,
                                           cli,
                                           NULL,
                                           dc,
@@ -1185,7 +1186,8 @@ static NTSTATUS libnet_join_lookup_dc_rpc(TALLOC_CTX *mem_ctx,
                use_kerberos = false;
        }
 
-       status = libnet_join_connect_dc_ipc(r->in.dc_name,
+       status = libnet_join_connect_dc_ipc(mem_ctx,
+                                           r->in.dc_name,
                                            account,
                                            domain,
                                            password,
@@ -1934,7 +1936,8 @@ static NTSTATUS libnet_join_unjoindomain_rpc(TALLOC_CTX *mem_ctx,
        ZERO_STRUCT(domain_pol);
        ZERO_STRUCT(user_pol);
 
-       status = libnet_join_connect_dc_ipc(r->in.dc_name,
+       status = libnet_join_connect_dc_ipc(mem_ctx,
+                                           r->in.dc_name,
                                            r->in.admin_account,
                                            r->in.admin_domain,
                                            r->in.admin_password,