curl: apply eventfd free patch (#373692)

This commit is contained in:
Simon Žlender 2025-01-14 10:55:36 +01:00 committed by Vladimír Čunát
parent d7bc610521
commit 9d9ddb55ca
No known key found for this signature in database
GPG Key ID: E747DF1F9575A3AA
2 changed files with 39 additions and 0 deletions

View File

@ -0,0 +1,33 @@
From ff5091aa9f73802e894b1cbdf24ab84e103200e2 Mon Sep 17 00:00:00 2001
From: Andy Pan <i@andypan.me>
Date: Thu, 12 Dec 2024 12:48:56 +0000
Subject: [PATCH] async-thread: avoid closing eventfd twice
When employing eventfd for socketpair, there is only one file
descriptor. Closing that fd twice might result in fd corruption.
Thus, we should avoid closing the eventfd twice, following the
pattern in lib/multi.c.
Fixes #15725
Closes #15727
Reported-by: Christian Heusel
---
lib/asyn-thread.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lib/asyn-thread.c b/lib/asyn-thread.c
index a58e4b790494..32d496b107cb 100644
--- a/lib/asyn-thread.c
+++ b/lib/asyn-thread.c
@@ -195,9 +195,11 @@ void destroy_thread_sync_data(struct thread_sync_data *tsd)
* 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.
*/
+#ifndef USE_EVENTFD
if(tsd->sock_pair[1] != CURL_SOCKET_BAD) {
wakeup_close(tsd->sock_pair[1]);
}
+#endif
#endif
memset(tsd, 0, sizeof(*tsd));
}

View File

@ -63,6 +63,12 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-x8p9tIsJCXQ+rvNCUNoCwZvGHU8dzt1mA/EJQJU2q1Y=";
};
# FIXME: avoid rebuilding darwin stdenv for now
patches = lib.optionals (!stdenv.isDarwin) [
# https://github.com/curl/curl/issues/15725
./fix-eventfd-free.patch
];
# this could be accomplished by updateAutotoolsGnuConfigScriptsHook, but that causes infinite recursion
# necessary for FreeBSD code path in configure
postPatch = ''