The Wire · Showcase
GOLANG PATCHES CRYPTO RACE, TOOLS FIXES PLAN 9 COMPATIBILITY
By RepoJournal · Filed · About Go
Go's crypto/autocert library ships a critical data race fix while the tools team systematically hardens Plan 9 support across gopls and the standard library.
The most pressing fix landed in golang/crypto: Manager.createCert() had a classic data race where concurrent goroutines for the same domain were reading state.locked without holding a lock [1]. This is the kind of bug that only surfaces under load and causes mysterious production failures. The fix removes the racy field entirely and computes ownership state under proper synchronization. Meanwhile, golang/tools is in heavy cleanup mode for Plan 9. gopls/internal/telemetry now skips tests that depend on memory-mapped files, which Plan 9 doesn't support [2]. The internal/diff package swapped out Plan 9's incompatible diff command for ape/diff from the POSIX compatibility layer [3]. These aren't edge-case fixes: Plan 9 is a tier-1 platform for Go, and every test failure compounds. Over in golang/text, unicode/norm hit an infinite loop bug when processing invalid input because the character size could be zero [4]. The fix changes how the package reports invalid characters so downstream code doesn't have to check for zero-width characters everywhere. golang/go also shipped a TLS privacy hardening: ECH (Encrypted Client Hello) will no longer include the PSK extension in the outer hello, preventing attackers from harvesting and replaying outer client hellos [5]. None of these are flashy features, but they're exactly the kind of fixes that prevent 3 AM pages.
Action items
- → Review crypto/autocert changes if you use autocert in production golang/crypto [plan]
- → If you maintain Plan 9 builds of Go tools, pull golang/tools updates golang/tools [plan]
- → Monitor unicode/norm for potential input handling edge cases in your codebase golang/text [monitor]
References
- [1] acme/autocert: fix data race in Manager.createCert golang/crypto
- [2] gopls/internal/telemetry: skip the telemetry test on Plan 9 golang/tools
- [3] internal/diff: use ape/patch and ape/diff on Plan 9 golang/tools
- [4] unicode/norm: avoid infinite loop on invalid input golang/text
- [5] crypto/tls: omit PSK in ECH outer client hello golang/go
FAQ
- What changed in Go on June 27, 2026?
- Go's crypto/autocert library ships a critical data race fix while the tools team systematically hardens Plan 9 support across gopls and the standard library.
- What should Go teams do about it?
- Review crypto/autocert changes if you use autocert in production • If you maintain Plan 9 builds of Go tools, pull golang/tools updates • Monitor unicode/norm for potential input handling edge cases in your codebase
- Which Go repositories shipped on June 27, 2026?
- golang/crypto, golang/tools, golang/text, golang/go