[Openvpn-devel,v1] Preserve socket protocol during float processing

Message ID 20250617084136.10215-1-gert@greenie.muc.de
State New
Headers show
Series [Openvpn-devel,v1] Preserve socket protocol during float processing | expand

Commit Message

Gert Doering June 17, 2025, 8:41 a.m. UTC
From: Ralf Lici <ralf@mandelbit.com>

During a float operation, we remove the old `mroute` object
corresponding to the current multi instance from the hash table and
insert a new one. With the introduction of the multi-socket feature, the
`mroute` structure gained a `proto` field, which must also be set in the
new instance, otherwise, hash table lookups will fail.

This commit ensures that the `proto` field is propagated from the
original to the new `mroute` object during float processing.

Change-Id: I0e17d9aea32eab7f44ed95037f077ae6dec52053
Signed-off-by: Ralf Lici <ralf@mandelbit.com>
Acked-by: Gianmarco De Gregori <gianmarco@mandelbit.com>
---

This change was reviewed on Gerrit and approved by at least one
developer. I request to merge it to master.

Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1063
This mail reflects revision 1 of this Change.

Acked-by according to Gerrit (reflected above):
Gianmarco De Gregori <gianmarco@mandelbit.com>

Comments

Gert Doering June 17, 2025, 9:18 a.m. UTC | #1
Explanation is very reasonable - good catch, "just adding a field to
the mroute" was far less trivial than the original patch made us assume.

Since it has an +2 from Giaan I have not further tested it, just stared
a bit at the change and it makes sense.  The server test framework does
not currently test floating, which is unfortunately and I really need
to address this (but it's somewhat tricky to get right with the t_client
framework).

mail-archive.com is not cooperating (it seems to categorize all the patches
I relay from gerrit to the list as "spam" - the mails from gerrit itself 
are there but the patch I sent is not...?) - so I recorded the gerrit URL
and the initial patch submission URL instead.

Your patch has been applied to the master branch.

commit db9632f7f976a5e0b810d76173a38f76879d99c0
Author: Ralf Lici
Date:   Tue Jun 17 10:41:28 2025 +0200

     Preserve socket protocol during float processing

     Signed-off-by: Ralf Lici <ralf@mandelbit.com>
     Acked-by: Gianmarco De Gregori <gianmarco@mandelbit.com>
     Message-Id: <20250617084136.10215-1-gert@greenie.muc.de>
     URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg31902.html
     URL: https://gerrit.openvpn.net/c/openvpn/+/1063
     Signed-off-by: Gert Doering <gert@greenie.muc.de>


--
kind regards,

Gert Doering

Patch

diff --git a/src/openvpn/multi.c b/src/openvpn/multi.c
index 169af43..a760e07 100644
--- a/src/openvpn/multi.c
+++ b/src/openvpn/multi.c
@@ -3217,6 +3217,12 @@ 
     struct hash *hash = m->hash;
     struct gc_arena gc = gc_new();
 
+    if (mi->real.type & MR_WITH_PROTO)
+    {
+        real.type |= MR_WITH_PROTO;
+        real.proto = sock->info.proto;
+    }
+
     if (!mroute_extract_openvpn_sockaddr(&real, &m->top.c2.from.dest, true))
     {
         goto done;