BUG/MEDIUM: mworker: avoid leak of client socket
If the master was reloaded and there was a established connection to a server, the FD resulting from the accept was leaking. There was no CLOEXEC flag set on the FD of the socketpair created during a connect call. This is specific to the socketpair in the master process but it should be applied to every protocol in case we use them in the master at some point. No backport needed.
This commit is contained in:
parent
680b2bdf2f
commit
c03eb01c1a
|
@ -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;
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue