From 08302c0731aee0d9533d2f994a8b9e8407640aa2 Mon Sep 17 00:00:00 2001 From: Val Date: Fri, 22 Sep 2023 19:45:07 +0200 Subject: [PATCH] Revert "wgengine/netstack: use buffer pools for UDP packet forwarding" This reverts commit fb2f3e474134302ac01b2d5a41da32883d0e1e97. Signed-off-by: Val --- wgengine/netstack/netstack.go | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/wgengine/netstack/netstack.go b/wgengine/netstack/netstack.go index b73ffae00..e2f930b4c 100644 --- a/wgengine/netstack/netstack.go +++ b/wgengine/netstack/netstack.go @@ -1059,15 +1059,10 @@ func (ns *Impl) acceptUDP(r *udp.ForwarderRequest) { go ns.forwardUDP(c, srcAddr, dstAddr) } -// Buffer pool for forwarding UDP packets. -var udpBufPool = &sync.Pool{ - New: func() any { - b := make([]byte, maxUDPPacketSize) - return &b - }, -} - func (ns *Impl) handleMagicDNSUDP(srcAddr netip.AddrPort, c *gonet.UDPConn) { + // In practice, implementations are advised not to exceed 512 bytes + // due to fragmenting. Just to be sure, we bump all the way to the MTU. + var maxUDPReqSize = tstun.DefaultMTU() // Packets are being generated by the local host, so there should be // very, very little latency. 150ms was chosen as something of an upper // bound on resource usage, while hopefully still being long enough for @@ -1075,10 +1070,7 @@ func (ns *Impl) handleMagicDNSUDP(srcAddr netip.AddrPort, c *gonet.UDPConn) { const readDeadline = 150 * time.Millisecond defer c.Close() - - bufp := udpBufPool.Get().(*[]byte) - defer udpBufPool.Put(bufp) - q := *bufp + q := make([]byte, maxUDPReqSize) // libresolv from glibc is quite adamant that transmitting multiple DNS // requests down the same UDP socket is valid. To support this, we read @@ -1191,11 +1183,7 @@ func startPacketCopy(ctx context.Context, cancel context.CancelFunc, dst net.Pac } go func() { defer cancel() // tear down the other direction's copy - - bufp := udpBufPool.Get().(*[]byte) - defer udpBufPool.Put(bufp) - pkt := *bufp - + pkt := make([]byte, maxUDPPacketSize) for { select { case <-ctx.Done():