asyn-thread: fix EBADF regression
Resolves: RHEL-85602
This commit is contained in:
parent
46bc5fdc44
commit
46bb6035af
@ -138,3 +138,146 @@ new mode 100644
|
||||
--
|
||||
2.49.0
|
||||
|
||||
From e34ec7de5964baa214555115f5061ed199d0f7b4 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Stenberg <daniel@haxx.se>
|
||||
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 <daniel@haxx.se>
|
||||
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
|
||||
|
||||
|
@ -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 <jmigacz@redhat.com> - 7.61.1-34.el8_10.5
|
||||
- asyn-thread: fix EBADF regression (RHEL-85602)
|
||||
|
||||
* Wed Jan 08 2025 Jacek Migacz <jmigacz@redhat.com> - 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)
|
||||
|
Loading…
Reference in New Issue
Block a user