cf-socket: use SOCK_CLOEXEC in socket_open when available

To close the possible race between socket() and fcntl(), we use
SOCK_CLOEXEC instead of fcntl() when it is available.

Closes #20442
This commit is contained in:
Itay Bookstein 2026-01-26 20:23:18 +02:00 committed by Daniel Stenberg
parent 0f042efcb1
commit 05367694ec
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2

View File

@ -309,6 +309,10 @@ static CURLcode socket_open(struct Curl_easy *data,
{
char errbuf[STRERROR_LEN];
#ifdef SOCK_CLOEXEC
addr->socktype |= SOCK_CLOEXEC;
#endif
DEBUGASSERT(data);
DEBUGASSERT(data->conn);
if(data->set.fopensocket) {
@ -351,7 +355,7 @@ static CURLcode socket_open(struct Curl_easy *data,
}
#endif /* USE_SO_NOSIGPIPE */
#ifdef HAVE_FCNTL
#if defined(HAVE_FCNTL) && !defined(SOCK_CLOEXEC)
if(fcntl(*sockfd, F_SETFD, FD_CLOEXEC) < 0) {
failf(data, "fcntl set CLOEXEC: %s",
curlx_strerror(SOCKERRNO, errbuf, sizeof(errbuf)));