From 7c5e4c7a4b46c3cc446aef387d16845be8ddc731 Mon Sep 17 00:00:00 2001 From: yiitz Date: Tue, 27 May 2025 06:15:48 +0800 Subject: [PATCH 1/3] Fix mkcp unreleased buffer (#3411) * Fix buffer leak in mkcp transport protocol * fix Write panic caused by concurrent state check --- transport/internet/kcp/connection.go | 5 ++++- transport/internet/kcp/output.go | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/transport/internet/kcp/connection.go b/transport/internet/kcp/connection.go index 61faa92270a..58a1f556197 100644 --- a/transport/internet/kcp/connection.go +++ b/transport/internet/kcp/connection.go @@ -390,7 +390,9 @@ func (c *Connection) writeMultiBufferInternal(reader io.Reader) error { }() var b *buf.Buffer - defer b.Release() + defer func() { + b.Release() + }() for { for { @@ -537,6 +539,7 @@ func (c *Connection) Terminate() { c.closer.Close() c.sendingWorker.Release() c.receivingWorker.Release() + c.output.Release() } func (c *Connection) HandleOption(opt SegmentOption) { diff --git a/transport/internet/kcp/output.go b/transport/internet/kcp/output.go index f6d1f010d12..d014f26ac16 100644 --- a/transport/internet/kcp/output.go +++ b/transport/internet/kcp/output.go @@ -10,12 +10,14 @@ import ( type SegmentWriter interface { Write(seg Segment) error + Release() } type SimpleSegmentWriter struct { sync.Mutex buffer *buf.Buffer writer io.Writer + closed bool } func NewSegmentWriter(writer io.Writer) SegmentWriter { @@ -28,6 +30,9 @@ func NewSegmentWriter(writer io.Writer) SegmentWriter { func (w *SimpleSegmentWriter) Write(seg Segment) error { w.Lock() defer w.Unlock() + if w.closed { + return io.ErrClosedPipe + } w.buffer.Clear() rawBytes := w.buffer.Extend(seg.ByteSize()) @@ -36,6 +41,13 @@ func (w *SimpleSegmentWriter) Write(seg Segment) error { return err } +func (w *SimpleSegmentWriter) Release() { + w.Lock() + defer w.Unlock() + w.buffer.Release() + w.closed = true +} + type RetryableWriter struct { writer SegmentWriter } @@ -51,3 +63,7 @@ func (w *RetryableWriter) Write(seg Segment) error { return w.writer.Write(seg) }) } + +func (w *RetryableWriter) Release() { + w.writer.Release() +} From b39d891ebb513ea82e0e6643f35e3c02905e1238 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 May 2025 23:19:17 +0100 Subject: [PATCH 2/3] Chore: bump github.com/quic-go/quic-go from 0.51.0 to 0.52.0 (#3413) Bumps [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) from 0.51.0 to 0.52.0. - [Release notes](https://github.com/quic-go/quic-go/releases) - [Commits](https://github.com/quic-go/quic-go/compare/v0.51.0...v0.52.0) --- updated-dependencies: - dependency-name: github.com/quic-go/quic-go dependency-version: 0.52.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 87f28a9d219..d023c7e3eec 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( github.com/pion/dtls/v2 v2.2.12 github.com/pion/transport/v2 v2.2.10 github.com/pires/go-proxyproto v0.8.1 - github.com/quic-go/quic-go v0.51.0 + github.com/quic-go/quic-go v0.52.0 github.com/refraction-networking/utls v1.7.3 github.com/seiflotfy/cuckoofilter v0.0.0-20220411075957-e3b120b3f5fb github.com/stretchr/testify v1.10.0 diff --git a/go.sum b/go.sum index d4472440f81..e9ad6efb284 100644 --- a/go.sum +++ b/go.sum @@ -442,8 +442,8 @@ github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.51.0 h1:K8exxe9zXxeRKxaXxi/GpUqYiTrtdiWP8bo1KFya6Wc= -github.com/quic-go/quic-go v0.51.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= +github.com/quic-go/quic-go v0.52.0 h1:/SlHrCRElyaU6MaEPKqKr9z83sBg2v4FLLvWM+Z47pA= +github.com/quic-go/quic-go v0.52.0/go.mod h1:MFlGGpcpJqRAfmYi6NC2cptDPSxRWTOGNuP4wqrWmzQ= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/refraction-networking/utls v1.7.3 h1:L0WRhHY7Oq1T0zkdzVZMR6zWZv+sXbHB9zcuvsAEqCo= github.com/refraction-networking/utls v1.7.3/go.mod h1:TUhh27RHMGtQvjQq+RyO11P6ZNQNBb3N0v7wsEjKAIQ= From 9844b507e50f5170c4d331dba8dfdbe3c395bea4 Mon Sep 17 00:00:00 2001 From: Shelikhoo Date: Mon, 26 May 2025 23:20:59 +0100 Subject: [PATCH 3/3] Update version to v5.33.0 --- core.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core.go b/core.go index 7ff1ed60db9..144bcf53cc0 100644 --- a/core.go +++ b/core.go @@ -18,7 +18,7 @@ import ( ) var ( - version = "5.32.0" + version = "5.33.0" build = "Custom" codename = "V2Fly, a community-driven edition of V2Ray." intro = "A unified platform for anti-censorship."