From: Kristof Provost <k...@freebsd.org>

If control packets come in through the DCO interface (i.e. via
dco_do_read()) we must process them through process_incoming_link().
This doesn't currently manifest, because Linux passes control packets
through the regular socket, not via the DCO netlink interface, but other
platforms will not.

Signed-off-by: Kristof Provost <kprov...@netgate.com>
---
 src/openvpn/forward.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/openvpn/forward.c b/src/openvpn/forward.c
index cd956cb3..c16f32fc 100644
--- a/src/openvpn/forward.c
+++ b/src/openvpn/forward.c
@@ -1104,8 +1104,16 @@ process_incoming_link(struct context *c)
 static void
 process_incoming_dco(struct context *c)
 {
+    struct link_socket_info *lsi = get_link_socket_info(c);
+
     msg(M_INFO, __func__);
     dco_do_read(&c->c1.tuntap->dco);
+
+    c->c2.buf = c->c1.tuntap->dco.dco_packet_in;
+    c->c2.from = lsi->lsa->actual;
+
+    process_incoming_link(c);
+    buf_init(&c->c1.tuntap->dco.dco_packet_in, 0);
 }
 
 /*
-- 
2.35.1



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

Reply via email to