Re: [Openvpn-devel] [PATCH v2] Fix fatal error at switching remotes (#629)

2020-09-17 Thread Lev Stipakov
Hi,

> If remote server has been resolved to multiple addresses, at
> least one connection attemt

typ0

> Fix this behaviour by cleaning stale addinfo objects.

Stared at code and it looks fine - same cleanup logic as in
do_close_link_socket().
Built and tested with MSVC - reproduced assert without patch and no
assert with patch.

Acked-by: Lev Stipakov 


___
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel


[Openvpn-devel] [PATCH v2] Fix fatal error at switching remotes (#629)

2020-09-16 Thread Vladislav Grishenko
If remote server has been resolved to multiple addresses, at
least one connection attemt has been made and connection to
the last address was skipped by management - resolved earlier
link socket addrinfo objects will not be cleared neither on
instance close nor in the next connection entry loop.
This causes fatal error assert:

>REMOTE:openvpn.net,1194,udp
remote ACCEPT
SUCCESS: remote command succeeded
>REMOTE:openvpn.net,1194,udp
remote SKIP
SUCCESS: remote command succeeded
>FATAL:Assertion failed at init.c:504 
(c->c1.link_socket_addr.current_remote == NULL)

Fix this behaviour by cleaning stale addinfo objects.

v2: better comment placement and too long length fix

Signed-off-by: Vladislav Grishenko 
---
 src/openvpn/init.c | 11 +++
 1 file changed, 11 insertions(+)

diff --git a/src/openvpn/init.c b/src/openvpn/init.c
index a785934a..8fc79638 100644
--- a/src/openvpn/init.c
+++ b/src/openvpn/init.c
@@ -500,6 +500,17 @@ next_connection_entry(struct context *c)
  */
 if (!c->options.persist_remote_ip)
 {
+/* Connection entry addinfo objects might have been 
resolved
+ * earlier but the entry itself might have been skipped by
+ * management on the previous loop.
+ * If so, clear the addrinfo objects as close_instance does
+ */
+if (c->c1.link_socket_addr.remote_list)
+{
+clear_remote_addrlist(>c1.link_socket_addr,
+  !c->options.resolve_in_advance);
+}
+
 /* close_instance should have cleared the addrinfo objects 
*/
 ASSERT(c->c1.link_socket_addr.current_remote == NULL);
 ASSERT(c->c1.link_socket_addr.remote_list == NULL);
-- 
2.17.1



___
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel