0
0
mirror of https://github.com/OpenVPN/openvpn.git synced 2024-09-20 03:52:28 +02:00

Don't overwrite socket flags when using DCO on Windows

Socket flags can be pushed, in which case they overwrite
existing value. We use socket flags to distingust between
DCO handle and socket on Windows. If server pushes --socket-flags,
we treat DCO handle as socket and everything explodes.

Fix by making link_socket_update_flags() update flags
(like name suggests) instead of overwriting them. Also
do not set TCP_NODELAY on DCO handle on Windows because
it doesn't make sense.

Change-Id: Ia34d73ca49041cb0ce22b84751cdbff57de96048
Signed-off-by: Lev Stipakov <lev@openvpn.net>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20230324121818.2358-1-lstipakov@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg26513.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
Lev Stipakov 2023-03-24 14:18:18 +02:00 committed by Gert Doering
parent a8170dd0e7
commit 82e7d5cfd8

View File

@ -957,7 +957,8 @@ socket_set_mark(socket_descriptor_t sd, int mark)
static bool
socket_set_flags(socket_descriptor_t sd, unsigned int sockflags)
{
if (sockflags & SF_TCP_NODELAY)
/* SF_TCP_NODELAY doesn't make sense for dco-win */
if ((sockflags & SF_TCP_NODELAY) && (!(sockflags & SF_DCO_WIN)))
{
return socket_set_tcp_nodelay(sd, 1);
}
@ -972,7 +973,8 @@ link_socket_update_flags(struct link_socket *ls, unsigned int sockflags)
{
if (ls && socket_defined(ls->sd))
{
return socket_set_flags(ls->sd, ls->sockflags = sockflags);
ls->sockflags |= sockflags;
return socket_set_flags(ls->sd, ls->sockflags);
}
else
{