libsmb: Use talloc_realloc() correctly in resolve_hosts()
authorVolker Lendecke <vl@samba.org>
Tue, 22 Sep 2020 11:52:57 +0000 (13:52 +0200)
committerJeremy Allison <jra@samba.org>
Wed, 23 Sep 2020 16:54:38 +0000 (16:54 +0000)
On realloc failure the old value is still around

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/libsmb/namequery.c

index bb43cb2f615a883a1b3e242e64b0b9cbbc620f1e..1812e9b8bd0bd197f7c2982043ba7f7777749760 100644 (file)
@@ -2819,6 +2819,7 @@ static NTSTATUS resolve_hosts(TALLOC_CTX *mem_ctx,
 
        for (res = ailist; res; res = res->ai_next) {
                struct sockaddr_storage ss = {0};
+               struct sockaddr_storage *tmp = NULL;
 
                if ((res->ai_addr == NULL) ||
                    (res->ai_addrlen == 0) ||
@@ -2839,14 +2840,15 @@ static NTSTATUS resolve_hosts(TALLOC_CTX *mem_ctx,
                }
                ret_count += 1;
 
-               iplist = talloc_realloc(
+               tmp = talloc_realloc(
                        mem_ctx, iplist, struct sockaddr_storage,
                        ret_count);
-               if (iplist == NULL) {
+               if (tmp == NULL) {
                        DEBUG(3,("resolve_hosts: malloc fail !\n"));
                        freeaddrinfo(ailist);
                        return NT_STATUS_NO_MEMORY;
                }
+               iplist = tmp;
                iplist[i] = ss;
                i++;
        }