From 5521872f80313060b659c27c55df2a6fdb74ec7a Mon Sep 17 00:00:00 2001 From: Gert Doering Date: Wed, 28 Jan 2026 12:04:19 +0100 Subject: [PATCH] tunnel_server(): close correct inotify fd On a full SIGUSR1 restart of a p2mp server compiled with --enable-async-push, tunnel_server() will try to close and reopen the "inotify" control file descriptor. For whatever reason, the original code referenced the wrong context, always closing fd 0. As a consequence of this, on the second SIGUSR1 restart, the server will close() the first active socket file descriptor, and if there are active DCO clients, the resulting event confusion will lead to an ASSERT(!mi->halt). Fix by closing the correct FD. Add logging. Github: fixes OpenVPN/openvpn#966 Change-Id: Iabc117848ad7b67d240c392f1a6aa2d7531fd5bb Signed-off-by: Gert Doering Acked-by: Arne Schwabe Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1497 Message-Id: <20260128110425.24350-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg35478.html Signed-off-by: Gert Doering --- src/openvpn/multi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/openvpn/multi.c b/src/openvpn/multi.c index 2af49d23..d9837936 100644 --- a/src/openvpn/multi.c +++ b/src/openvpn/multi.c @@ -4244,7 +4244,9 @@ tunnel_server(struct context *top) tunnel_server_loop(&multi); #ifdef ENABLE_ASYNC_PUSH - close(top->c2.inotify_fd); + msg(D_LOW, "%s: close multi.top.c2.inotify_fd (%d)", + __func__, multi.top.c2.inotify_fd); + close(multi.top.c2.inotify_fd); #endif /* shut down management interface */