diff --git a/0064-curl-7.61.1-EBADF.patch b/0064-curl-7.61.1-EBADF.patch index edca875..46d9ea9 100644 --- a/0064-curl-7.61.1-EBADF.patch +++ b/0064-curl-7.61.1-EBADF.patch @@ -138,3 +138,146 @@ new mode 100644 -- 2.49.0 +From e34ec7de5964baa214555115f5061ed199d0f7b4 Mon Sep 17 00:00:00 2001 +From: Daniel Stenberg +Date: Wed, 11 Sep 2019 23:11:58 +0200 +Subject: [PATCH] asyn-thread: s/AF_LOCAL/AF_UNIX for Solaris + +Reported-by: Dagobert Michelsen +Fixes #4328 +Closes #4333 +--- + lib/asyn-thread.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/lib/asyn-thread.c b/lib/asyn-thread.c +index 24da74885..fcbf1305e 100755 +--- a/lib/asyn-thread.c ++++ b/lib/asyn-thread.c +@@ -244,8 +244,8 @@ int init_thread_sync_data(struct thread_data * td, + Curl_mutex_init(tsd->mtx); + + #ifdef HAVE_SOCKETPAIR +- /* create socket pair */ +- if(socketpair(AF_LOCAL, SOCK_STREAM, 0, &tsd->sock_pair[0]) < 0) { ++ /* create socket pair, avoid AF_LOCAL since it doesn't build on Solaris */ ++ if(socketpair(AF_UNIX, SOCK_STREAM, 0, &tsd->sock_pair[0]) < 0) { + tsd->sock_pair[0] = CURL_SOCKET_BAD; + tsd->sock_pair[1] = CURL_SOCKET_BAD; + goto err_exit; +-- +2.49.0 + +From 9c76f694de1765152e0b349cd55baad5a501f55b Mon Sep 17 00:00:00 2001 +From: Daniel Stenberg +Date: Sat, 5 Oct 2019 15:41:09 +0200 +Subject: [PATCH] asyn-thread: make use of Curl_socketpair() where available + +--- + lib/asyn-thread.c | 26 ++++++++++++++------------ + 1 file changed, 14 insertions(+), 12 deletions(-) + +diff --git a/lib/asyn-thread.c b/lib/asyn-thread.c +index fcbf1305e..8c552baa9 100755 +--- a/lib/asyn-thread.c ++++ b/lib/asyn-thread.c +@@ -163,7 +165,7 @@ struct thread_sync_data { + char *hostname; /* hostname to resolve, Curl_async.hostname + duplicate */ + int port; +-#ifdef HAVE_SOCKETPAIR ++#ifdef USE_SOCKETPAIR + struct connectdata *conn; + curl_socket_t sock_pair[2]; /* socket pair */ + #endif +@@ -201,7 +203,7 @@ void destroy_thread_sync_data(struct thread_sync_data * tsd) + if(tsd->res) + Curl_freeaddrinfo(tsd->res); + +-#ifdef HAVE_SOCKETPAIR ++#ifdef USE_SOCKETPAIR + /* + * close one end of the socket pair (may be done in resolver thread); + * the other end (for reading) is always closed in the parent thread. +@@ -243,9 +245,9 @@ int init_thread_sync_data(struct thread_data * td, + + Curl_mutex_init(tsd->mtx); + +-#ifdef HAVE_SOCKETPAIR ++#ifdef USE_SOCKETPAIR + /* create socket pair, avoid AF_LOCAL since it doesn't build on Solaris */ +- if(socketpair(AF_UNIX, SOCK_STREAM, 0, &tsd->sock_pair[0]) < 0) { ++ if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, &tsd->sock_pair[0]) < 0) { + tsd->sock_pair[0] = CURL_SOCKET_BAD; + tsd->sock_pair[1] = CURL_SOCKET_BAD; + goto err_exit; +@@ -297,7 +299,7 @@ static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg) + struct thread_data *td = tsd->td; + char service[12]; + int rc; +-#ifdef HAVE_SOCKETPAIR ++#ifdef USE_SOCKETPAIR + char buf[1]; + #endif + +@@ -322,11 +324,11 @@ static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg) + free(td); + } + else { +-#ifdef HAVE_SOCKETPAIR ++#ifdef USE_SOCKETPAIR + if(tsd->sock_pair[1] != CURL_SOCKET_BAD) { + /* DNS has been resolved, signal client task */ + buf[0] = 1; +- if(write(tsd->sock_pair[1], buf, sizeof(buf)) < 0) { ++ if(swrite(tsd->sock_pair[1], buf, sizeof(buf)) < 0) { + /* update sock_erro to errno */ + tsd->sock_error = SOCKERRNO; + } +@@ -382,7 +384,7 @@ static void destroy_async_data(struct Curl_async *async) + if(async->os_specific) { + struct thread_data *td = (struct thread_data*) async->os_specific; + int done; +-#ifdef HAVE_SOCKETPAIR ++#ifdef USE_SOCKETPAIR + curl_socket_t sock_rd = td->tsd.sock_pair[0]; + struct connectdata *conn = td->tsd.conn; + #endif +@@ -407,7 +409,7 @@ static void destroy_async_data(struct Curl_async *async) + + free(async->os_specific); + } +-#ifdef HAVE_SOCKETPAIR ++#ifdef USE_SOCKETPAIR + /* + * ensure CURLMOPT_SOCKETFUNCTION fires CURL_POLL_REMOVE + * before the FD is invalidated to avoid EBADF on EPOLL_CTL_DEL +@@ -649,14 +651,14 @@ int Curl_resolver_getsock(struct connectdata *conn, + timediff_t ms; + struct Curl_easy *data = conn->data; + struct resdata *reslv = (struct resdata *)data->state.resolver; +-#ifdef HAVE_SOCKETPAIR ++#ifdef USE_SOCKETPAIR + struct thread_data *td = (struct thread_data*)conn->async.os_specific; + #else + (void)socks; + #endif + (void)numsocks; + +-#ifdef HAVE_SOCKETPAIR ++#ifdef USE_SOCKETPAIR + if(td) { + /* return read fd to client for polling the DNS resolution status */ + socks[0] = td->tsd.sock_pair[0]; +@@ -673,7 +675,7 @@ int Curl_resolver_getsock(struct connectdata *conn, + else + milli = 200; + Curl_expire(data, milli, EXPIRE_ASYNC_NAME); +-#ifdef HAVE_SOCKETPAIR ++#ifdef USE_SOCKETPAIR + } + #endif + +-- +2.49.0 + diff --git a/curl.spec b/curl.spec index c112069..a517ca5 100644 --- a/curl.spec +++ b/curl.spec @@ -1,7 +1,7 @@ Summary: A utility for getting files from remote servers (FTP, HTTP, and others) Name: curl Version: 7.61.1 -Release: 34%{?dist}.4 +Release: 34%{?dist}.5 License: MIT Source: https://curl.haxx.se/download/%{name}-%{version}.tar.xz @@ -586,6 +586,9 @@ rm -f ${RPM_BUILD_ROOT}%{_libdir}/libcurl.la %{_libdir}/libcurl.so.4.[0-9].[0-9].minimal %changelog +* Wed Jan 08 2025 Jacek Migacz - 7.61.1-34.el8_10.5 +- asyn-thread: fix EBADF regression (RHEL-85602) + * Wed Jan 08 2025 Jacek Migacz - 7.61.1-34.el8_10.4 - make up incomplete patch for host name wildcard checking (RHEL-5680) - asyn-thread: issue CURL_POLL_REMOVE before closing socket (RHEL-85602)