]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Bug-fix: segfault in dco_get_peer_stats()
authorSelva Nair <selva.nair@gmail.com>
Mon, 27 Mar 2023 17:12:36 +0000 (13:12 -0400)
committerGert Doering <gert@greenie.muc.de>
Tue, 28 Mar 2023 07:06:21 +0000 (09:06 +0200)
  We persist peer-stats when restarting, but an early restart
  before open_tun results in a segfault in dco_get_peer_stats().
  To reproduce, trigger a TLS handshake error due to lack of common
  protocols, for example.

  Fix by checking  that tuntap is defined before dereferencing it.

Signed-off-by: Selva Nair <selva.nair@gmail.com>
Acked-by: Antonio Quartulli <a@unstable.cc>
Message-Id: <20230327171236.51771-1-selva.nair@gmail.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg26530.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
src/openvpn/dco_linux.c

index 317f9dc0317847617311194ede9e021a233657e1..41540c0f8c2dc7a79e837c30018820beb1060f0e 100644 (file)
@@ -975,6 +975,11 @@ dco_get_peer_stats(struct context *c)
     uint32_t peer_id = c->c2.tls_multi->dco_peer_id;
     msg(D_DCO_DEBUG, "%s: peer-id %d", __func__, peer_id);
 
+    if (!c->c1.tuntap)
+    {
+        return 0;
+    }
+
     dco_context_t *dco = &c->c1.tuntap->dco;
     struct nl_msg *nl_msg = ovpn_dco_nlmsg_create(dco, OVPN_CMD_GET_PEER);
     struct nlattr *attr = nla_nest_start(nl_msg, OVPN_ATTR_GET_PEER);