]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
ensure file descriptors 0-2 are in use before using libuv
authorThomas Abraham <tabraham@suse.com>
Mon, 30 Jun 2025 18:03:56 +0000 (14:03 -0400)
committerOndřej Surý <ondrej@isc.org>
Thu, 28 Aug 2025 06:16:06 +0000 (08:16 +0200)
libuv expects file descriptors <= STDERR_FILENO are in use. otherwise,
it may abort when closing a file descriptor it opened.

See https://github.com/libuv/libuv/pull/4559

Closes #5226

lib/isc/uv.c

index f0dcd51212dbc880f95c750c7e9a55be6a49c3ae..c0361746cae5366ad130993458eabeec8be6efa9 100644 (file)
@@ -130,6 +130,21 @@ isc__uv_free(void *ptr) {
 
 void
 isc__uv_initialize(void) {
+       /*
+        * Ensure the first 3 file descriptors are open
+        * otherwise, libuv may use one and trigger abort
+        * when closing it.
+        *
+        * See https://github.com/libuv/libuv/pull/4559
+        */
+       do {
+               int fd = open("/dev/null", O_RDWR, 0);
+               RUNTIME_CHECK(fd >= 0);
+               if (fd > STDERR_FILENO) {
+                       close(fd);
+                       break;
+               }
+       } while (true);
 #if UV_VERSION_HEX >= UV_VERSION(1, 38, 0)
        int r;
        isc_mem_create("uv", &isc__uv_mctx);