Fix resource leak in pcp_connect. master
authorTatsuo Ishii <[email protected]>
Tue, 23 Dec 2025 08:13:34 +0000 (17:13 +0900)
committerTatsuo Ishii <[email protected]>
Tue, 23 Dec 2025 08:34:27 +0000 (17:34 +0900)
The function did not call freeaddrinfo() in some places.
Backpatch-through: v4.6

src/libs/pcp/pcp.c

index 3992eeeb71718e4cb2896a448dddac84cb9e7b8d..f8a635065b6e9d3c0768b57a6416ce074456588f 100644 (file)
@@ -196,6 +196,7 @@ pcp_connect(char *hostname, int port, char *username, char *password, FILE *Pfde
                                pcp_internal_error(pcpConn,
                                                                   "ERROR: failed to create INET domain socket with error \"%s\"",
                                                                   strerror(errno));
+                               freeaddrinfo(res);
                                return pcpConn;
                        }
 
@@ -203,6 +204,7 @@ pcp_connect(char *hostname, int port, char *username, char *password, FILE *Pfde
                                                   (char *) &on, sizeof(on)) < 0)
                        {
                                close(fd);
+                               freeaddrinfo(res);
                                pcp_internal_error(pcpConn,
                                                                   "ERROR: set socket option failed with error \"%s\"", strerror(errno));
                                pcpConn->connState = PCP_CONNECTION_BAD;
@@ -212,6 +214,7 @@ pcp_connect(char *hostname, int port, char *username, char *password, FILE *Pfde
                        if (connect(fd, walk->ai_addr, walk->ai_addrlen) < 0)
                        {
                                close(fd);
+                               freeaddrinfo(res);
                                pcp_internal_error(pcpConn,
                                                                   "ERROR: connection to host \"%s\" failed with error \"%s\"", hostname, strerror(errno));
                                pcpConn->connState = PCP_CONNECTION_BAD;
@@ -220,6 +223,7 @@ pcp_connect(char *hostname, int port, char *username, char *password, FILE *Pfde
                        break;                          /* successfully connected */
                }
 
+               freeaddrinfo(res);
                /* no address available */
                if (fd == -1)
                {