From b2392fb2503e1019ebc1c948d34007b23a84f322 Mon Sep 17 00:00:00 2001 From: Laurence Date: Sun, 16 Nov 2025 06:07:48 +0000 Subject: [PATCH] relay: fix buffer leak on UDP read error by returning buffer to pool When ReadFromUDP fails in readPackets, the buffer was not returned to the sync.Pool, causing a small but persistent leak under error conditions. Return the buffer before continuing to ensure reuse and stable memory. Scope: minimal hotfix (no broader refactors). --- relay/relay.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/relay/relay.go b/relay/relay.go index e74ed87..e0a6a98 100644 --- a/relay/relay.go +++ b/relay/relay.go @@ -187,6 +187,8 @@ func (s *UDPProxyServer) readPackets() { n, remoteAddr, err := s.conn.ReadFromUDP(buf) if err != nil { logger.Error("Error reading UDP packet: %v", err) + // Return buffer to pool on read error to avoid leaks + bufferPool.Put(buf[:1500]) continue } s.packetChan <- Packet{data: buf[:n], remoteAddr: remoteAddr, n: n}