Skip to content

cmd/link: Go 1.24.3 and 1.23.9 regression - duplicated definition of symbol dlopen #73617

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
djedward opened this issue May 7, 2025 · 12 comments
Labels
compiler/runtime Issues related to the Go compiler and/or runtime. Critical A critical problem that affects the availability or correctness of production systems built using Go NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. release-blocker
Milestone

Comments

@djedward
Copy link

djedward commented May 7, 2025

Go version

go 1.24.3/1.23.9 (linux amd64 --> darwin amd64)

Output of go env in your module/workspace:

AR='ar'
CC='gcc'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_ENABLED='1'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
CXX='g++'
GCCGO='gccgo'
GO111MODULE=''
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN=''
GOCACHE='/home/user/.cache/go-build'
GOCACHEPROG=''
GODEBUG=''
GOENV='/home/user/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build1648213215=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMOD='/dev/null'
GOMODCACHE='/home/user/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/user/go'
GOPRIVATE=''
GOPROXY='direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/user/.config/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.24.3'
GOWORK=''
PKG_CONFIG='pkg-config'

What did you do?

I went to release Go 1.24.3 and Go 1.23.9 into our build system and some packages began failing when trying to cross-compile to darwin/amd64:

I've reproduced it down to a small example:

mkdir repro

cd repro

go mod init example.com/failure

cat > main.go << EOF
package main

import (
	_ "github.com/ebitengine/purego"
)

func main() {
}
EOF

go mod tidy

GOOS=darwin GOARCH=amd64 go build -o main main.go

What did you see happen?

I received an error:
link: duplicated definition of symbol dlopen, from github.com/ebitengine/purego and github.com/ebitengine/purego

What did you expect to see?

I expected it to continue to compile, as it did in Go 1.24.2

@Sunyue
Copy link

Sunyue commented May 7, 2025

The same issue also happens to me natively on darwin/amd64

@seankhliao seankhliao changed the title link: Go 1.24.3 and 1.23.9 regression - duplicated definition of symbol dlopen cmd/link: Go 1.24.3 and 1.23.9 regression - duplicated definition of symbol dlopen May 7, 2025
@gopherbot gopherbot added the compiler/runtime Issues related to the Go compiler and/or runtime. label May 7, 2025
@corani
Copy link

corani commented May 7, 2025

I'm guessing it may have been introduced here: https://go-review.googlesource.com/c/go/+/662335/3/src/cmd/link/internal/loader/loader.go

Maybe a corner case where old size == new size?

@prattmic
Copy link
Member

prattmic commented May 7, 2025

cc @golang/compiler @cherrymui

@prattmic prattmic added this to the Go1.25 milestone May 7, 2025
@prattmic prattmic added Soon This needs action soon. (recent regressions, service outages, unusual time-sensitive situations) Critical A critical problem that affects the availability or correctness of production systems built using Go NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. labels May 7, 2025
@prattmic
Copy link
Member

prattmic commented May 7, 2025

Possibly this is an interaction between the dlopen symbol in https://github.com/ebitengine/purego/blob/9059adfae616e486aa4145d6f4d5fefaa1b47a61/dlfcn_stubs.s and //go:cgo_import_dynamic purego_dlopen dlopen "/usr/lib/libSystem.B.dylib" in https://github.com/ebitengine/purego/blob/9059adfae616e486aa4145d6f4d5fefaa1b47a61/dlfcn_darwin.go#L16?

@prattmic
Copy link
Member

prattmic commented May 7, 2025

Oh, it is probably between the assembly symbol and data symbol at https://github.com/ebitengine/purego/blob/9059adfae616e486aa4145d6f4d5fefaa1b47a61/dlfcn.go#L85-L86.

@TotallyGamerJet
Copy link

Oh, it is probably between the assembly symbol and data symbol at https://github.com/ebitengine/purego/blob/9059adfae616e486aa4145d6f4d5fefaa1b47a61/dlfcn.go#L85-L86.

I don't believe they have the same name though. One is purego.dlopen and the other is just dlopen since it doesn't have the special dot symbol. Changing the assembly name still fails to link.

Subject: [PATCH] rename assembly
---
Index: dlfcn.go
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dlfcn.go b/dlfcn.go
--- a/dlfcn.go	(revision 2c36c15debde48b37b30e9ae9dea32483ef79922)
+++ b/dlfcn.go	(date 1746629059115)
@@ -82,18 +82,18 @@
 // sadly, I do not know of anyway to remove the assembly stubs entirely because //go:linkname doesn't
 // appear to work if you link directly to the C function on darwin arm64.
 
-//go:linkname dlopen dlopen
+//go:linkname dlopen go_dlopen
 var dlopen uintptr
 var dlopenABI0 = uintptr(unsafe.Pointer(&dlopen))
 
-//go:linkname dlsym dlsym
+//go:linkname dlsym go_dlsym
 var dlsym uintptr
 var dlsymABI0 = uintptr(unsafe.Pointer(&dlsym))
 
-//go:linkname dlclose dlclose
+//go:linkname dlclose go_dlclose
 var dlclose uintptr
 var dlcloseABI0 = uintptr(unsafe.Pointer(&dlclose))
 
-//go:linkname dlerror dlerror
+//go:linkname dlerror go_dlerror
 var dlerror uintptr
 var dlerrorABI0 = uintptr(unsafe.Pointer(&dlerror))
Index: dlfcn_stubs.s
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/dlfcn_stubs.s b/dlfcn_stubs.s
--- a/dlfcn_stubs.s	(revision 2c36c15debde48b37b30e9ae9dea32483ef79922)
+++ b/dlfcn_stubs.s	(date 1746629059143)
@@ -6,21 +6,21 @@
 #include "textflag.h"
 
 // func dlopen(path *byte, mode int) (ret uintptr)
-TEXT dlopen(SB), NOSPLIT|NOFRAME, $0-0
+TEXT go_dlopen(SB), NOSPLIT|NOFRAME, $0-0
 	JMP purego_dlopen(SB)
 	RET
 
 // func dlsym(handle uintptr, symbol *byte) (ret uintptr)
-TEXT dlsym(SB), NOSPLIT|NOFRAME, $0-0
+TEXT go_dlsym(SB), NOSPLIT|NOFRAME, $0-0
 	JMP purego_dlsym(SB)
 	RET
 
 // func dlerror() (ret *byte)
-TEXT dlerror(SB), NOSPLIT|NOFRAME, $0-0
+TEXT go_dlerror(SB), NOSPLIT|NOFRAME, $0-0
 	JMP purego_dlerror(SB)
 	RET
 
 // func dlclose(handle uintptr) (ret int)
-TEXT dlclose(SB), NOSPLIT|NOFRAME, $0-0
+TEXT go_dlclose(SB), NOSPLIT|NOFRAME, $0-0
 	JMP purego_dlclose(SB)
 	RET

@cherrymui
Copy link
Member

Yes, it is the assembly (TEXT) symbol and the data (BSS) symbol. The assembly function is short (6 bytes), smaller than the data symbol (uintptr, 8 bytes). Previously we just pick the one with content, i.e. the text symbol. Now we error out if the non-content symbol is larger, in the sense that if the code actually reads the variable as a uintptr, it will read to the next symbol. In this case, the code doesn't read the variable, just takes its address, which is fine.

For backward compatibility we probably want to still allow this case, at least if one side is TEXT symbol. There is no easy way in the linker to detect whether we read the content as a variable.

For a quick fix, you can change the variable definition from uintptr to uint8, like var dlopen uint8, then it is smaller.

@cherrymui
Copy link
Member

I don't believe they have the same name though. One is purego.dlopen and the other is just dlopen since it doesn't have the special dot symbol. Changing the assembly name still fails to link.

They do. Both sides don't have the dot. The name of the assembly symbol is the one at the TEXT line, i.e. dlopen. The variable's link name in the Go file is the last component of the go:linkname pragma, which is dlopen, not purego.dlopen.

Your patch changes both from dlopen to go_dlopen, so they still have the same name.

@cherrymui
Copy link
Member

cherrymui commented May 7, 2025

This patch to the linker may make it work. I haven't thoroughly tested it though.

diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go
index 128173b8cf..52d48912c7 100644
--- a/src/cmd/link/internal/loader/loader.go
+++ b/src/cmd/link/internal/loader/loader.go
@@ -455,29 +455,45 @@ func (st *loadState) addSym(name string, ver int, r *oReader, li uint32, kind in
 	// If one is a DATA symbol (i.e. has content, DataSize != 0)
 	// and the other is BSS, the one with content wins.
 	// If both are BSS, the one with larger size wins.
-	// Specifically, the "overwrite" variable and the final result are
+	//
+	// For a special case, we allow a TEXT symbol overwrites a BSS symbol
+	// even if the BSS symbol has larger size. This is because there is
+	// code like below to take the address of a function
+	//
+	//	//go:linkname fn
+	//	var fn uintptr
+	//	var fnAddr = uintptr(unsafe.Pointer(&fn))
+	//
+	// TODO: maybe limit this case to just pointer sized variable?
+	//
+	// In summary, the "overwrite" variable and the final result are
 	//
 	// new sym       old sym       overwrite
 	// ---------------------------------------------
 	// DATA          DATA          true  => ERROR
 	// DATA lg/eq    BSS  sm/eq    true  => new wins
 	// DATA small    BSS  large    true  => ERROR
+	// TEXT          BSS           true  => new wins
 	// BSS  large    DATA small    true  => ERROR
 	// BSS  large    BSS  small    true  => new wins
 	// BSS  sm/eq    D/B  lg/eq    false => old wins
-	overwrite := r.DataSize(li) != 0 || oldsz < sz
+	// BSS           TEXT          false => old wins
+	overwrite := r.DataSize(li) != 0 || oldsz < sz ||
+		sym.AbiSymKindToSymKind[objabi.SymKind(osym.Type())].IsText()
 	if overwrite {
 		// new symbol overwrites old symbol.
 		oldtyp := sym.AbiSymKindToSymKind[objabi.SymKind(oldsym.Type())]
-		if !(oldtyp.IsData() && oldr.DataSize(oldli) == 0) || oldsz > sz {
-			log.Fatalf("duplicated definition of symbol %s, from %s and %s", name, r.unit.Lib.Pkg, oldr.unit.Lib.Pkg)
+		newtyp := sym.AbiSymKindToSymKind[objabi.SymKind(osym.Type())]
+		if !(oldtyp.IsData() && oldr.DataSize(oldli) == 0) || (oldsz > sz && !newtyp.IsText()) {
+			log.Fatalf("duplicated definition of symbol %s, from %s (type %s size %d) and %s (type %s size %d)", name, r.unit.Lib.Pkg, newtyp, sz, oldr.unit.Lib.Pkg, oldtyp, oldsz)
 		}
 		l.objSyms[oldi] = objSym{r.objidx, li}
 	} else {
 		// old symbol overwrites new symbol.
-		typ := sym.AbiSymKindToSymKind[objabi.SymKind(oldsym.Type())]
-		if !typ.IsData() { // only allow overwriting data symbol
-			log.Fatalf("duplicated definition of symbol %s, from %s and %s", name, r.unit.Lib.Pkg, oldr.unit.Lib.Pkg)
+		newtyp := sym.AbiSymKindToSymKind[objabi.SymKind(osym.Type())]
+		if !newtyp.IsData() { // only allow overwriting data symbol
+			oldtyp := sym.AbiSymKindToSymKind[objabi.SymKind(oldsym.Type())]
+			log.Fatalf("duplicated definition of symbol %s, from %s (type %s size %d) and %s (type %s size %d)", name, r.unit.Lib.Pkg, newtyp, sz, oldr.unit.Lib.Pkg, oldtyp, oldsz)
 		}
 	}
 	return oldi

@cherrymui cherrymui added release-blocker and removed Soon This needs action soon. (recent regressions, service outages, unusual time-sensitive situations) labels May 7, 2025
hajimehoshi added a commit to ebitengine/purego that referenced this issue May 7, 2025
hajimehoshi added a commit to ebitengine/purego that referenced this issue May 7, 2025
@djedward
Copy link
Author

djedward commented May 7, 2025

The patch appears to be working for the builds that were failing for us.

@denizkoele
Copy link

updating to github.com/ebitengine/purego v0.9.0-alpha.3.0.20250507171635-5047c08daa38 made it work, thank you!

@hajimehoshi
Copy link
Member

hajimehoshi commented May 9, 2025

updating to github.com/ebitengine/purego v0.9.0-alpha.3.0.20250507171635-5047c08daa38 made it work, thank you!

This works, though I recommend the stable branch version:

go get github.com/ebitengine/purego@1638563e361522e5f63511d84c4541ae1c5fd704

EDIT: We've released v0.8.3

go get github.com/ebitengine/[email protected]

github-merge-queue bot pushed a commit to jaegertracing/jaeger that referenced this issue May 9, 2025
## Which problem is this PR solving?
- Our release #7107 is blocked by the build error `link: duplicated
definition of symbol dlopen, from github.com/ebitengine/purego and
github.com/ebitengine/purego`
- Ongoing upstream issue golang/go#73617

## Description of the changes
- Pin to a pre-release of https://github.com/ebitengine/purego v0.8.3
that provides a patch

## How was this change tested?
- CI

---------

Signed-off-by: Yuri Shkuro <[email protected]>
wwqgtxx added a commit to MetaCubeX/mihomo that referenced this issue May 10, 2025
penberg added a commit to tursodatabase/limbo that referenced this issue May 10, 2025
…o 1.23.9' from Preston Thorpe

Go 1.23.9 introduced a change with to it's linker that caused a
`duplicate symbol` error with purego 1.82
this is the recommended fix per
golang/go#73617

Closes #1466
gosom added a commit to gosom/google-maps-scraper that referenced this issue May 10, 2025
kitty314 added a commit to kitty314/mihomoabab that referenced this issue May 10, 2025
commit 2b4726b
Author: wwqgtxx <[email protected]>
Date:   Sat May 10 12:32:47 2025 +0800

    fix: build on go1.24.3
    golang/go#73617

commit 26e6d83
Author: xishang0128 <[email protected]>
Date:   Wed May 7 17:07:39 2025 +0800

    chore: make select display the specified testUrl
    for MetaCubeX#2013

commit 50d7834
Author: wwqgtxx <[email protected]>
Date:   Mon May 5 01:32:25 2025 +0800

    chore: change the separator of the `SAFE_PATHS` environment variable to the default separator of the operating system platform (i.e., `;` in Windows and `:` in other systems)

commit 86c127d
Author: wwqgtxx <[email protected]>
Date:   Sun May 4 10:39:15 2025 +0800

    fix: missing read waiter for cancelers

commit febb602
Author: wwqgtxx <[email protected]>
Date:   Sun May 4 11:09:40 2025 +0800

    fix: hysteria2 inbound not set UDPTimeout

commit 9e57b29
Author: wwqgtxx <[email protected]>
Date:   Sat May 3 15:06:13 2025 +0800

    chore: update dependencies

commit 791ea5e
Author: wwqgtxx <[email protected]>
Date:   Thu May 1 12:33:21 2025 +0800

    chore: allow setting addition safePaths by environment variable `SAFE_PATHS`
    package managers can allow for pre-defined safe paths without disabling the entire security check feature
    for MetaCubeX#2004

commit 7e7016b
Author: wwqgtxx <[email protected]>
Date:   Thu May 1 01:27:08 2025 +0800

    chore: removed `routing-mark` and `interface-name` of the group, please set it directly on the proxy instead

commit b4fe669
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 30 23:21:13 2025 +0800

    chore: better path checks

commit cad26ac
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 30 17:26:45 2025 +0800

    chore: fetcher will change duration to achieve fast retry when the update failed with a 2x factor step from 1s to `interval`

commit f328203
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 30 16:03:02 2025 +0800

    feat: not inline proxy-provider can also set `payload` as fallback proxies when file/http parsing fails

commit 5c40a63
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 30 14:09:15 2025 +0800

    feat: not inline rule-provider can also set `payload` as fallback rules when file/http parsing fails

commit 61d6a9a
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 30 13:21:42 2025 +0800

    fix: fetcher does not start the pull loop when local file parsing errors occur and the first remote update fails

commit a013ac3
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 29 21:52:44 2025 +0800

    chore: give better error messages for some stupid config files

commit ee5d77c
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 29 21:15:48 2025 +0800

    chore: cleanup tls clientFingerprint code

commit 936df90
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 29 09:01:54 2025 +0800

    chore: update dependencies

commit f774276
Author: Larvan2 <[email protected]>
Date:   Mon Apr 28 03:07:21 2025 +0000

    fix: ensure wait group completes

commit aa51b9f
Author: wwqgtxx <[email protected]>
Date:   Mon Apr 28 10:28:45 2025 +0800

    chore: replace using internal batch package to x/sync/errgroup

    In the original batch implementation, the Go() method will always start a new goroutine and then wait for the concurrency limit, which is unnecessary for the current code. x/sync/errgroup will block Go() until the concurrency limit is met, which can effectively reduce memory usage.
    In addition, the original batch always saves the return value of Go(), but it is not used in the current code, which will also waste a lot of memory space in high concurrency scenarios.

commit d55b047
Author: wwqgtxx <[email protected]>
Date:   Sun Apr 27 09:39:46 2025 +0800

    chore: ignore interfaces not with FlagUp in local interface finding

commit efc7abc
Author: xishang0128 <[email protected]>
Date:   Fri Apr 25 12:10:18 2025 +0800

    actions: fix pacman build

commit c2301f6
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 25 10:34:34 2025 +0800

    chore: rebuild fingerprint and keypair handle

commit 468cfc3
Author: WeidiDeng <[email protected]>
Date:   Thu Apr 24 19:50:16 2025 +0800

    fix: set sni to servername if not specified for trojan outbound (MetaCubeX#1991)

commit 5dce957
Author: xishang0128 <[email protected]>
Date:   Thu Apr 24 17:25:14 2025 +0800

    actions: improve build process

commit 4ecb49b
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 23 12:25:42 2025 +0800

    chore: dynamic fetch remoteAddr in hysteria2 service

commit 7de4af2
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 23 12:10:37 2025 +0800

    fix: shadowtls test

commit 48d8efb
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 23 12:00:10 2025 +0800

    fix: do NOT reset the quic-go internal state when only port is different

commit e6e7aa5
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 22 23:44:55 2025 +0800

    fix: alpn apply on shadowtls

commit 99aa1b0
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 22 20:49:54 2025 +0800

    feat: inbound support shadow-tls

commit 52ad793
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 22 20:09:24 2025 +0800

    fix: shadowtls v1 not work

commit 2fb9331
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 22 10:37:05 2025 +0800

    fix: some resources are not released in listener

commit 793ce45
Author: wwqgtxx <[email protected]>
Date:   Mon Apr 21 22:58:08 2025 +0800

    chore: update quic-go to 0.51.0

commit 39d6a0d
Author: wwqgtxx <[email protected]>
Date:   Mon Apr 21 12:07:33 2025 +0800

    chore: update utls to 1.7.0

commit d5243ad
Author: wwqgtxx <[email protected]>
Date:   Sat Apr 19 02:04:09 2025 +0800

    chore: better global-client-fingerprint handle

commit 6236cb1
Author: wwqgtxx <[email protected]>
Date:   Sat Apr 19 01:32:55 2025 +0800

    chore: cleanup trojan code

commit 619c9dc
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 18 20:16:51 2025 +0800

    chore: apply the default interface/mark of the dialer in the final stage

commit 9c5067e
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 18 19:34:21 2025 +0800

    action: disable MinGW's path conversion in test

commit feee9b3
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 18 16:59:53 2025 +0800

    chore: remove unneeded tls timeout in anytls

commit 63e66f4
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 18 16:59:28 2025 +0800

    chore: cleanup trojan code

commit bad61f9
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 18 11:40:37 2025 +0800

    fix: avoid panic in inbound test

commit 69ce4d0
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 17 23:40:46 2025 +0800

    chore: speed up inbound test

commit b59f11f
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 17 21:07:35 2025 +0800

    chore: add singMux inbound test for shadowsocks/trojan/vless/vmess

commit 30d90d4
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 17 21:06:55 2025 +0800

    chore: update option checks to use IsZeroOptions

commit 76052b5
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 17 12:54:36 2025 +0800

    fix: grpc in trojan not apply client-fingerprint

commit 7d7f5c8
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 17 10:02:48 2025 +0800

    chore: add inbound test for tuic

commit e79465d
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 17 09:26:12 2025 +0800

    chore: add inbound test for hysteria2

commit 345d3d7
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 17 09:01:26 2025 +0800

    chore: add inbound test for anytls

commit 3d806b5
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 17 01:36:14 2025 +0800

    chore: add inbound test for shadowsocks/trojan

commit b5fcd1d
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 17 00:11:24 2025 +0800

    fix: chacha8-ietf-poly1305 not work

commit b21b8ee
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 16 22:22:56 2025 +0800

    fix: panic in ssr packet

commit d0d0c39
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 16 20:44:48 2025 +0800

    chore: add inbound test for vmess/vless

commit a75e570
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 16 20:38:10 2025 +0800

    fix: vision conn read short buffer error

commit 9e0889c
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 16 13:16:11 2025 +0800

    fix: observable test

commit 55cbbf7
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 16 13:13:01 2025 +0800

    fix: singledo test

commit 664b134
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 16 13:02:50 2025 +0800

    fix: websocket data losing

commit ba3c44a
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 16 09:39:52 2025 +0800

    chore: code cleanup

commit dcb20e2
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 16 08:47:44 2025 +0800

    fix: websocket server upgrade in golang1.20

commit 3d2cb99
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 16 01:00:06 2025 +0800

    fix: grpc outbound not apply ca fingerprint

commit 984535f
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 15 21:59:35 2025 +0800

    action: run tests on more platforms

commit 8fa4e81
Author: wwqgtxx <[email protected]>
Date:   Sun Apr 13 03:03:28 2025 +0800

    chore: remove internal crypto/tls fork in reality server

commit 7551c8a
Author: wwqgtxx <[email protected]>
Date:   Sat Apr 12 23:42:57 2025 +0800

    chore: remove unneed code

commit 237e2ed
Author: wwqgtxx <[email protected]>
Date:   Sat Apr 12 22:46:26 2025 +0800

    chore: tun will add firewall rule for Profile ALL on windows system stack

commit fe01033
Author: wwqgtxx <[email protected]>
Date:   Sat Apr 12 22:27:07 2025 +0800

    chore: quic sniffer should use the exact length of crypto stream when assembling

commit 84cd0ef
Author: wwqgtxx <[email protected]>
Date:   Sat Apr 12 20:27:30 2025 +0800

    chore: remove internal crypto/tls fork in shadowtls

commit cedb36d
Author: wwqgtxx <[email protected]>
Date:   Sat Apr 12 11:19:03 2025 +0800

    chore: using SetupContextForConn to reduce the DialContext cannot be cancelled

commit 7a260f7
Author: HiMetre <[email protected]>
Date:   Fri Apr 11 09:20:58 2025 +0800

    fix: udp dial support ip4p (MetaCubeX#1377)

commit 8085c68
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 11 00:33:07 2025 +0800

    chore: decrease direct using *net.TCPConn

commit dbb5b7d
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 10 23:32:26 2025 +0800

    fix: SetupContextForConn should return context error to user

commit bfd06eb
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 10 01:16:54 2025 +0800

    chore: rebuild SetupContextForConn with context.AfterFunc

commit e8af058
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 10 00:13:14 2025 +0800

    fix: websocketWithEarlyDataConn can't close underlay conn when is dialing or not dialed

commit 487d7fa
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 9 17:53:36 2025 +0800

    fix: panic under some stupid input config

commit 4b15568
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 9 12:33:01 2025 +0800

    chore: cleanup metadata code

commit cac2bf7
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 9 11:39:00 2025 +0800

    chore: cleanup netip code

commit b2d2890
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 9 10:32:13 2025 +0800

    chore: cleanup resolveUDPAddr code

commit 8752f80
Author: anytls <[email protected]>
Date:   Wed Apr 9 10:55:53 2025 +0900

    fix: anytls stream read error (MetaCubeX#1970)

    Co-authored-by: anytls <anytls>

commit a6c0c02
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 8 23:42:21 2025 +0800

    chore: ignore interfaces not in IfOperStatusUp when fetch system dns server on windows

commit 2acb0b7
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 8 19:20:29 2025 +0800

    fix: tun IncludeInterface/ExcludeInterface priority

commit 2a40eba
Author: wwqgtxx <[email protected]>
Date:   Tue Apr 8 19:07:39 2025 +0800

    feat: tun add `exclude-src-port`,`exclude-src-port-range`,`exclude-dst-port` and `exclude-dst-port-range` on linux

commit a22efd5
Author: okhowang <[email protected]>
Date:   Tue Apr 8 12:10:30 2025 +0800

    feat: add exclude port and exclude port range options (MetaCubeX#1951)

    Fixes MetaCubeX#1769

commit 9e8f4ad
Author: wwqgtxx <[email protected]>
Date:   Sun Apr 6 10:43:21 2025 +0800

    chore: better addr parsing

commit 09c7ee0
Author: wwqgtxx <[email protected]>
Date:   Sun Apr 6 10:12:57 2025 +0800

    fix: grpc server panic

commit 2a08c44
Author: wwqgtxx <[email protected]>
Date:   Sat Apr 5 10:48:07 2025 +0800

    action: fix run build on pull_request

commit 190047c
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 4 21:05:54 2025 +0800

    fix: grpc transport not apply dial timeout

commit 24a9ff6
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 4 13:33:00 2025 +0800

    fix: disallow dialFunc be called after grpc transport has be closed

commit efa2243
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 4 11:54:19 2025 +0800

    fix: shut it down more aggressively in grpc transport closing

commit b0bd4f4
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 4 11:12:08 2025 +0800

    fix: resources not released when hysteria2 verification failed

commit eaaccff
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 4 10:55:16 2025 +0800

    fix: race in Single.Do

commit e81f3a9
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 4 09:08:52 2025 +0800

    fix: correctly implement references to proxies

commit 323973f
Author: wwqgtxx <[email protected]>
Date:   Fri Apr 4 00:22:52 2025 +0800

    fix: converter judgment conditions

commit ed7533c
Author: 5aaee9 <[email protected]>
Date:   Thu Apr 3 08:52:19 2025 -0700

     fix: tproxy high cpu usage (MetaCubeX#1957)

commit 7de24e2
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 3 23:41:24 2025 +0800

    fix: StreamGunWithConn not synchronously close the incoming net.Conn

commit 622d99d
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 3 22:42:32 2025 +0800

    chore: rebuild outdated proxy auto close mechanism

commit 7f1225b
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 3 22:41:05 2025 +0800

    fix: grpc transport can't be closed

commit 23ffe45
Author: wwqgtxx <[email protected]>
Date:   Thu Apr 3 19:47:49 2025 +0800

    chore: using http/httptrace to get local/remoteAddr for grpc client

commit 7b37fcf
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 2 23:47:34 2025 +0800

    fix: auto_redirect should only hijack DNS requests from local addresses

commit daa592c
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 2 21:13:46 2025 +0800

    fix: converter panic

commit 577f64a
Author: wwqgtxx <[email protected]>
Date:   Wed Apr 2 14:39:07 2025 +0800

    fix: X25519MLKEM768 does not work properly with reality

commit 025ff19
Author: wwqgtxx <[email protected]>
Date:   Fri Mar 28 10:54:11 2025 +0800

    fix: wrong conditional judgment in removeExtraHTTPHostPort
    MetaCubeX#1939

commit f615346
Author: anytls <[email protected]>
Date:   Thu Mar 27 20:25:31 2025 +0800

    chore: anytls protocol version 2 (MetaCubeX#1936)

commit 7b38261
Author: wwqgtxx <[email protected]>
Date:   Tue Mar 25 01:19:39 2025 +0800

    chore: update gvisor

commit 0f32c05
Author: enfein <[email protected]>
Date:   Thu Mar 20 05:58:04 2025 +0000

    feat: support UDP over TCP in mieru (MetaCubeX#1926)

commit 4f8b70c
Author: 5aaee9 <[email protected]>
Date:   Wed Mar 19 12:20:48 2025 +0800

    fix: buffer in tproxy not recycle (MetaCubeX#1923)

commit dcef787
Author: wwqgtxx <[email protected]>
Date:   Tue Mar 18 09:09:54 2025 +0800

    chore: update utls

commit 7c444a9
Author: wwqgtxx <[email protected]>
Date:   Mon Mar 17 23:51:21 2025 +0800

    fix: correctly handle ipv6 zone

commit e3d4ec2
Author: wwqgtxx <[email protected]>
Date:   Mon Mar 17 14:00:51 2025 +0800

    fix: race at interfaceName setting

commit 14217e7
Author: xishang0128 <[email protected]>
Date:   Mon Mar 17 13:21:23 2025 +0800

    chore: update service capabilities to include CAP_SYS_TIME and CAP_DAC_OVERRIDE

commit 68abb13
Author: wwqgtxx <[email protected]>
Date:   Mon Mar 17 10:42:13 2025 +0800

    chore: support longest-prefix matches in local interface finding

commit dee5898
Author: Cesaryuan <[email protected]>
Date:   Sat Mar 15 13:27:29 2025 +0800

    fix: memory leak due to unclosed session (MetaCubeX#1908)

commit 1e22f4d
Author: wwqgtxx <[email protected]>
Date:   Fri Mar 14 12:07:23 2025 +0800

    chore: reduce data copying in quic sniffer and better handle data fragmentation and overlap

commit a7a796b
Author: wwqgtxx <[email protected]>
Date:   Thu Mar 13 16:27:29 2025 +0800

    chore: cleanup quic sniff's code

commit ff89bf0
Author: Cesaryuan <[email protected]>
Date:   Thu Mar 13 13:28:40 2025 +0800

    feat: add gost-plugin in which only ws and mws are currently supported. (MetaCubeX#1896)

commit 801f3c3
Author: 5aaee9 <[email protected]>
Date:   Thu Mar 13 13:19:36 2025 +0800

    feat: support sniff quic fragment data (MetaCubeX#1899)

commit 7ff046a
Author: wwqgtxx <[email protected]>
Date:   Thu Mar 13 08:52:27 2025 +0800

    chore: modify UDPSniff's function signature to prepare for its ability to handle multiple packets.

commit 0ed159e
Author: wwqgtxx <[email protected]>
Date:   Wed Mar 12 13:33:52 2025 +0800

    chore: code cleanup

commit 070eb31
Author: wwqgtxx <[email protected]>
Date:   Wed Mar 12 11:42:57 2025 +0800

    chore: speedup system stack in tun

commit f318b80
Author: wwqgtxx <[email protected]>
Date:   Tue Mar 11 22:50:55 2025 +0800

    chore: better cache implement for group's getProxies

commit c0de3c0
Author: wwqgtxx <[email protected]>
Date:   Mon Mar 10 11:10:39 2025 +0800

    fix: some default value in dialer not restore in tun when config reload

commit 4bd3ae5
Author: wwqgtxx <[email protected]>
Date:   Mon Mar 10 10:45:07 2025 +0800

    chore: dialer will consider the routing of the local interface when auto-detect-interface in tun is enabled
    for MetaCubeX#1881 MetaCubeX#1819

commit 00e6466
Author: Skyxim <[email protected]>
Date:   Mon Mar 10 09:13:38 2025 +0800

    chore: update checksum generation step

commit c94b442
Author: Skyxim <[email protected]>
Date:   Mon Mar 10 09:02:08 2025 +0800

    chore: add checksum generation for production artifacts
mholt added a commit to timelinize/timelinize that referenced this issue May 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
compiler/runtime Issues related to the Go compiler and/or runtime. Critical A critical problem that affects the availability or correctness of production systems built using Go NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. release-blocker
Projects
Status: No status
Development

No branches or pull requests

9 participants