From 012c6f1be742dd0bbc7c19f821cd203d6887adf2 Mon Sep 17 00:00:00 2001 From: Paul Lorenz Date: Sun, 14 Feb 2021 08:45:45 -0500 Subject: [PATCH] Fix UDP connection leak in tunneler --- tunnel/udp_vconn/api.go | 2 ++ tunnel/udp_vconn/manager.go | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/tunnel/udp_vconn/api.go b/tunnel/udp_vconn/api.go index 0ee9af8c3..463ec2dfd 100644 --- a/tunnel/udp_vconn/api.go +++ b/tunnel/udp_vconn/api.go @@ -19,11 +19,13 @@ package udp_vconn import ( "github.com/openziti/foundation/util/mempool" "github.com/openziti/sdk-golang/ziti" + "io" "net" "time" ) type UDPWriterTo interface { + io.Closer WriteTo(b []byte, addr net.Addr) (int, error) LocalAddr() net.Addr } diff --git a/tunnel/udp_vconn/manager.go b/tunnel/udp_vconn/manager.go index 6020b52dd..68661eb29 100644 --- a/tunnel/udp_vconn/manager.go +++ b/tunnel/udp_vconn/manager.go @@ -22,6 +22,7 @@ import ( "github.com/openziti/edge/tunnel" "github.com/openziti/foundation/util/mempool" "github.com/openziti/sdk-golang/ziti" + "github.com/sirupsen/logrus" "io" "net" "time" @@ -137,6 +138,11 @@ func (manager *manager) close(conn *udpConn) { conn.closed = true delete(manager.connMap, conn.srcAddr.String()) close(conn.readC) + if err := conn.writeConn.Close(); err != nil { + logrus.WithField("service", conn.service). + WithField("src_addr", conn.srcAddr). + WithError(err).Error("error while closing udp connection") + } } }