BUG/MINOR: sock: Unclosed fd in case of connection allocation failure
authorRemi Tricot-Le Breton <rlebreton@haproxy.com>
Thu, 14 Jan 2021 14:26:24 +0000 (15:26 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 5 Feb 2021 14:05:01 +0000 (15:05 +0100)
If allocating a connection object failed right after a successful accept
on a listener, the new file descriptor was not properly closed.

This fixes GitHub issue #905.
It can be backported to 2.3.

(cherry picked from commit 25dd0ad1239627aa87d9ce25d268546037a97197)
Signed-off-by: Willy Tarreau <w@1wt.eu>

src/sock.c

index 9eff7f1..3ebcb14 100644 (file)
@@ -161,6 +161,9 @@ struct connection *sock_accept_conn(struct listener *l, int *status)
 
  fail_conn:
        sockaddr_free(&addr);
+       /* The accept call already succeeded by the time we try to allocate the connection,
+        * we need to close it in case of failure. */
+       close(cfd);
  fail_addr:
        ret = CO_AC_PAUSE;
        goto done;