]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Allow a few levels of recursion in virtual_output_callback()
authorSelva Nair <selva.nair@gmail.com>
Thu, 28 Jul 2022 03:45:08 +0000 (23:45 -0400)
committerGert Doering <gert@greenie.muc.de>
Tue, 23 Aug 2022 18:23:13 +0000 (20:23 +0200)
Without this, replies to commands from the management client
are sometimes lost if the server is writing when a command
comes in and leads to a recursive call to this function.

For some reason I've not been able to trigger this on Linux,
but it does sometimes happen on Windows during intense write
activity by openvpn.exe sending log lines to the management
client.

Signed-off-by: Selva Nair <selva.nair@gmail.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20220728034508.15180-2-selva.nair@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg24751.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
(cherry picked from commit 4dfd592ff1ee18aa4859264c8a341dfa1a291988)

src/openvpn/manage.c

index 0ba4f677d1f2e788810593f8d997c12c22730169..6af551528dd7b13aa2eb01c2b90651da2d9873ec 100644 (file)
@@ -314,8 +314,7 @@ virtual_output_callback_func(void *arg, const unsigned int flags, const char *st
 
 #define AF_DID_PUSH  (1<<0)
 #define AF_DID_RESET (1<<1)
-
-    if (!recursive_level) /* don't allow recursion */
+    if (recursive_level < 5) /* limit recursion */
     {
         struct gc_arena gc = gc_new();
         struct log_entry e;
@@ -382,6 +381,12 @@ virtual_output_callback_func(void *arg, const unsigned int flags, const char *st
 
         --recursive_level;
     }
+    else
+    {
+        /* cannot use msg here */
+        printf("virtual_output: message to management interface "
+               "dropped due to recursion: <%s>\n", str);
+    }
 }
 
 /*