diff --git a/src/proto_sockpair.c b/src/proto_sockpair.c index ef0e725639..f83c51b86c 100644 --- a/src/proto_sockpair.c +++ b/src/proto_sockpair.c @@ -280,6 +280,15 @@ static int sockpair_connect_server(struct connection *conn, int data, int delack return SF_ERR_INTERNAL; } + if (master == 1 && (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)) { + ha_alert("Cannot set CLOEXEC on client socket.\n"); + close(sv[0]); + close(sv[1]); + conn->err_code = CO_ER_SOCK_ERR; + conn->flags |= CO_FL_ERROR; + return SF_ERR_INTERNAL; + } + /* if a send_proxy is there, there are data */ data |= conn->send_proxy_ofs; diff --git a/src/proto_tcp.c b/src/proto_tcp.c index 0c531e6ec9..9bc048b9c8 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -364,6 +364,14 @@ int tcp_connect_server(struct connection *conn, int data, int delack) return SF_ERR_INTERNAL; } + if (master == 1 && (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)) { + ha_alert("Cannot set CLOEXEC on client socket.\n"); + close(fd); + conn->err_code = CO_ER_SOCK_ERR; + conn->flags |= CO_FL_ERROR; + return SF_ERR_INTERNAL; + } + if (be->options & PR_O_TCP_SRV_KA) setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof(one)); diff --git a/src/proto_uxst.c b/src/proto_uxst.c index 878a10db59..965b7cb84f 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -502,6 +502,14 @@ static int uxst_connect_server(struct connection *conn, int data, int delack) return SF_ERR_INTERNAL; } + if (master == 1 && (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1)) { + ha_alert("Cannot set CLOEXEC on client socket.\n"); + close(fd); + conn->err_code = CO_ER_SOCK_ERR; + conn->flags |= CO_FL_ERROR; + return SF_ERR_INTERNAL; + } + /* if a send_proxy is there, there are data */ data |= conn->send_proxy_ofs;