Skip to content

Go 1.26.3#169

Merged
bradfitz merged 32 commits into
tailscale.go1.26from
bradfitz/go1.26.3
May 7, 2026
Merged

Go 1.26.3#169
bradfitz merged 32 commits into
tailscale.go1.26from
bradfitz/go1.26.3

Conversation

@bradfitz
Copy link
Copy Markdown
Member

@bradfitz bradfitz commented May 7, 2026

  • [release-branch.go1.26] cmd/link: use bfd ld 2.36+ on linux/arm64 instead of gold
  • [release-branch.go1.26] fix incorrect loop trip counts
  • [release-branch.go1.26] cmd/go: specify full path to go command when running go tool covdata
  • [release-branch.go1.26] cmd/compile: handle min integer step in loop
  • [release-branch.go1.26] runtime: add sysUnreserve to undo sysReserve
  • [release-branch.go1.26] all: update x/net to 705de46f
  • [release-branch.go1.26] runtime: use uname version check for 64-bit time on 32-bit arch codepaths
  • [release-branch.go1.26] html/template: fix escaper bypass by treating empty script type as JavaScript
  • [release-branch.go1.26] net/http/httputil: reencode queries with many parameters in proxy
  • [release-branch.go1.26] cmd/fix: change -diff to exit 1 if diffs exist
  • [release-branch.go1.26] crypto/internal/fips140/drbg: build tag out entropy generation on Wasm
  • [release-branch.go1.26] cmd/compile/internal/devirtualize: use pointer identity for type comparison
  • [release-branch.go1.26] cmd/go: use MkdirTemp to create temp directory for "go bug"
  • [release-branch.go1.26] go/types, types2: handle unconstrained type parameters correctly in a few places
  • [release-branch.go1.26] crypto/tls: wrap ML-KEM hybrids in fips140.WithoutEnforcement
  • [release-branch.go1.26] runtime: fix timespec definition on 32bits systems
  • [release-branch.go1.26] lib/fips140: update inprocess to v1.26.0
  • [release-branch.go1.26] lib/fips140: add certified pointing to v1.0.0-c2097c7c
  • [release-branch.go1.26] net: avoid double-free of cgo pointer when handling large DNS response
  • [release-branch.go1.26] crypto/fips140: add package docs
  • [release-branch.go1.26] cmd/compile: fix loopvar version detection with line directives
  • [release-branch.go1.26] net/mail: fix quadratic complexity in consumeComment
  • [release-branch.go1.26] cmd/pack: refuse to extract files with directory components
  • [release-branch.go1.26] html/template: fix escaping of URLs in meta content attributes
  • [release-branch.go1.26] os: avoid panic when RemoveAll fails to remove a symlink
  • [release-branch.go1.26] cmd/compile: keep blank nodes alive in b.loop
  • [release-branch.go1.26] cmd/go: invalidate test cache when -coverpkg dependencies change
  • [release-branch.go1.26] net/mail: fix quadratic consumePhrase behavior
  • [release-branch.go1.26] all: avoid unsafe StringToUTF16Ptr on Windows
  • [release-branch.go1.26] cmd/go: reject sumdb response lacking module hash
  • [release-branch.go1.26] go1.26.3

Updates tailscale/corp#41490

xnox and others added 30 commits April 17, 2026 12:15
…tead of gold

The bfd linker has been fixed for a while. In the mean time gold got
deprecated and has stopped receiving new features. Add runtime version
checking and only use gold, if bfd ld 2.35 and lower is detected.

This enables using `-buildmode=shared` on arm64 without installing
binutils-gold (on distributions that split package this), as well as
to use external ldflags that ld.bfd supports, and ld.gold does
not. For example, this enables to specify gcs-report-dynamic=none when
building with GCC-15.

For golang#22040.
Fixes golang#78406.

Change-Id: I4eb8b3dabb78844ff662332ad63a4625278271b1
Cq-Include-Trybots: luci.golang.try:go1.26-linux-arm64_debian13
Reviewed-on: https://go-review.googlesource.com/c/go/+/740480
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Mark Freeman <markfreeman@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Cherry Mui <cherryyz@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/760302
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Dmitri Shuralyov <dmitshur@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
While CL 758801 addresses this fix on tip, it does not apply
cleanly on go1.25 or go1.26. In the interest of safety, this
disables loop inversion; it's the least invasive path.

Fixes golang#78375

Change-Id: Iac399ca47b811042dc5f38272d201d3dc61390b8
Reviewed-on: https://go-review.googlesource.com/c/go/+/766982
Reviewed-by: Jorropo <jorropo.pgm@gmail.com>
TryBot-Bypass: Dmitri Shuralyov <dmitshur@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
…running go tool covdata

Otherwise the GOROOT will be a post-1.25 GOROOT, while we try to run
"go tool covdata" with a go command that's 1.24 or earlier from the post
1.25 toolchain. The 1.24 go command won't be able to find covdata in the
1.25 goroot because go 1.25 and later don't ship with a prebuilt covdata
tool.

For golang#71867
For golang#75031
Fixes golang#78412

Change-Id: I770f10a288347ac33cf721d34a2adb1a6a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/756220
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Matloob <matloob@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
(cherry picked from commit 90adad7)
Reviewed-on: https://go-review.googlesource.com/c/go/+/760500
TryBot-Bypass: Dmitri Shuralyov <dmitshur@google.com>
Since negating min int will overflows back to itself, causing a panic
inside subWillUnderflow check.

Fixes golang#78676

Change-Id: Ibbf2fa3228b9890a1a76ac6f4ff504b7e125b29f
Reviewed-on: https://go-review.googlesource.com/c/go/+/766260
Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Jorropo <jorropo.pgm@gmail.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/766840
TryBot-Bypass: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This is inspired by CL 724560 by Bobby Powers, particularly their great
commit message.

When using address sanitizer with leak detection, sysReserve registers
memory regions with LSAN via lsanregisterrootregion. However, several
code paths release this memory using sysFreeOS without first
unregistering from LSAN. This leaves LSAN with stale root region entries
pointing to memory that has been unmapped and may be reallocated for
other purposes.

This bug was latent until glibc 2.42, which changed pthread stack guard
pages from mprotect(PROT_NONE) to madvise(MADV_GUARD_INSTALL). The
difference matters because LSAN filters root region scanning by
intersecting registered regions with readable mappings from
/proc/self/maps:

- mprotect(PROT_NONE) splits the VMA, creating a separate entry with
  ---p permissions. LSAN's IsReadable() check excludes it from scanning.

- MADV_GUARD_INSTALL operates at the page table level without modifying
  the VMA. The region still appears as rw-p in /proc/self/maps, so LSAN
  includes it in the scan and crashes with SIGSEGV when accessing the
  guard pages.

Address this by adding sysUnreserve to undo sysReserve. sysUnreserve
unregisters the region from LSAN and frees the mapping.

With the addition of sysUnreserve, we have complete coverage of LSAN
unregister in the mem.go abstract: sysFree unregisters Ready memory.
sysUnreserve unregisters Reserved memory. And there is no way to free
Prepared memory at all (it must transition to Ready or Reserved first).

The implementation of lsanunregisterrootregion [1] finds the region by
exact match of start and end address. It therefore does not support
splitting a region, and we must extend this requirement to sysUnreserve
and sysFree. I am not completely confident that we always pass the full
region to sysFree, but LSAN aborts if it can't find the region, so we
must not be blatantly violating this.

sysReserveAligned does need to unreserve a subset of a region, so it
cannot use sysUnreserve directly. Rather than breaking the mem.go
abstract, move sysReserveAligned into mem.go, adding it to the
abstraction.

We should not have any calls to sysFreeOS outside of the mem.go
abstraction. That is now true with this CL.

Fixes golang#78511.

[1] https://github.com/llvm/llvm-project/blob/3e3e362648fa062038b90ccc21f46a09d6902288/compiler-rt/lib/lsan/lsan_common.cpp#L1157

Change-Id: I8c46a62154b2f23456ffd5086a7b91156a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/762381
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit 40ec033)
Reviewed-on: https://go-review.googlesource.com/c/go/+/767022
TryBot-Bypass: Carlos Amedee <carlos@golang.org>
Reviewed-by: Carlos Amedee <carlos@golang.org>
Fixes golang#78478

Change-Id: Ic950951a8149a9db0c43e7f6846926b2806a8889
Reviewed-on: https://go-review.googlesource.com/c/go/+/768500
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
…ime on 32-bit arch codepaths

The previous fallback-on-ENOSYS logic causes issues on forks of Linux.

Android: golang#77621 (CL 750040 added a workaround with a TODO,
this fixes that TODO)
Causes the OS to terminate the program when running on Android
versions <=10 since the seccomp jail does not know about the 64-bit
time syscall and is configured to terminate the program on any
unknown syscall.

Synology's Linux: golang#77930
On old versions of Synology's Linux they added custom vendor syscalls
without adding a gap in the syscall numbers, that means when we call
the newer Linux syscall which was added later, Synology's Linux
interprets it as a completely different vendor syscall.

Originally by Jorropo in CL 751340.

Updates golang#77930
Fixes golang#77931

Co-authored-by: Jorropo <jorropo.pgm@gmail.com>
Change-Id: I90e15495d9249fd7f6e112f9e3ae8ad1322f56e0
Reviewed-on: https://go-review.googlesource.com/c/go/+/758902
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Jorropo <jorropo.pgm@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit 04dc12c)
Reviewed-on: https://go-review.googlesource.com/c/go/+/770220
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
… empty script type as JavaScript

Thank you to Mundur (https://github.com/M0nd0R) for reporting this issue.

For golang#78981
Fixes golang#79025
Fixes CVE-2026-39826

Change-Id: I3f2e06496020ece655d156fb099ff556af8cc836
Reviewed-on: https://go-review.googlesource.com/c/go/+/771180
Reviewed-by: Roland Shoemaker <roland@golang.org>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit a63b23f)
Reviewed-on: https://go-review.googlesource.com/c/go/+/772042
Reviewed-by: Neal Patel <nealpatel@google.com>
… parameters in proxy

When ReverseProxy forwards a request containing more than
urlmaxqueryparams (GODEBUG) query parameters, reencode the
outbound query parameters.

Avoids potential smuggling of query parameters, where the
sender sends many query parameters, the user's Rewrite hook
fails to observe those parameters due to the limit being
exceeded, and the request is forwarded with the full set
of parameters.

For golang#78948
Fixes golang#78986
Fixes CVE-2026-39825

Change-Id: I691be7899c4b6208bf61f6b78dacfdf56a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/770541
Reviewed-by: Nicholas Husin <nsh@golang.org>
Reviewed-by: Nicholas Husin <husin@google.com>
Auto-Submit: Damien Neil <dneil@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit 6795bb3)
Reviewed-on: https://go-review.googlesource.com/c/go/+/772040
Reviewed-by: Damien Neil <dneil@google.com>
Currently "go fix -diff" and "go vet -fix -diff" always exit with status
0 even when they print diffs, which is inconsistent with "gofmt -d"
(golang#46289) and "go mod tidy -diff" (golang#27005) that exit non-zero when diffs
are present.

The root cause is that the default VetHandleStdout (copyToStdout) simply
copies the tool stdout through without checking whether any content was
produced. This change installs a new copyAndDetectDiff handler in -diff
mode that copies the tool stdout through and calls base.SetExitStatus(1)
when content is present, matching the pattern used by "go mod tidy -diff".

For golang#77583
Fixes golang#77801

Change-Id: I588fbaae8b3690da2f821240baa4a3b14b78f280
Reviewed-on: https://go-review.googlesource.com/c/go/+/749700
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-by: Michael Matloob <matloob@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
(cherry picked from commit 2d72c26)
Reviewed-on: https://go-review.googlesource.com/c/go/+/772000
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
…ntropy generation on Wasm

In FIPS-140 mode we currently use a scratch buffer in the BSS
section to generate entropy by measuring jittering for memory
touches. The BSS variable usually doesn't cost much, except on
Wasm, due to the way the linear memory works. FIPS-140 mode is
not supported on Wasm, so this code is not actually needed there.
This CL uses a build tag to exclude it, so we don't need to
include an (unused) 32 MB BSS variable in Wasm binaries.

Updates golang#78321.
Fixes golang#78354.

Change-Id: I5139029fa98c302e8769be3e3034967d777f1f16
Reviewed-on: https://go-review.googlesource.com/c/go/+/758361
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Roland Shoemaker <roland@golang.org>
(cherry picked from commit e32ec47)
Reviewed-on: https://go-review.googlesource.com/c/go/+/767320
…r identity for type comparison

Updates golang#78404
Fixes golang#78409


Change-Id: I6adc1fb42ad6a3acce21333c6819d0796a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/760161
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
(cherry picked from commit 09031d9)
Reviewed-on: https://go-review.googlesource.com/c/go/+/761060
Reviewed-by: Robert Griesemer <gri@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
…y for "go bug"

Don't use a predictable, potentially attacker-controlled filename in /tmp.

For golang#78584
Fixes golang#78588
Fixes CVE-2026-39819

Change-Id: I72116aa6dd8fa50f65b6dc0292a15a8c6a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/763882
Reviewed-by: Nicholas Husin <husin@google.com>
Reviewed-by: Nicholas Husin <nsh@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit 5d6aa23)
Reviewed-on: https://go-review.googlesource.com/c/go/+/763883
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
…arameters correctly in a few places

When iterating over a type set via a range clause, am unconstrained
type set produces a single (nil, nil) result. This was not properly
accounted for in a few places:

- In the code for the append and copy built-in, handle the (nil, nil)
  case.
- Likewise, in NewSignatureType, panic with the correct (string) error
  in this case.

Check all remaining places where we iterate over type sets with range
for correctness.

Fixes golang#78198.

Change-Id: If0f33f43dad59b4b5ef4c310f80522c25c6e251f
Reviewed-on: https://go-review.googlesource.com/c/go/+/755941
Reviewed-by: Robert Griesemer <gri@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Mark Freeman <markfreeman@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/756124
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
…thoutEnforcement

To avoid excessive backports, this CL copies rerunWithFIPS140Enforced
from CL 759382, and overrides the certificates used for FIPS-140 tests
to avoid requiring the entirety of CL 759380 and CL 759381.

Fixes golang#78372
Updates golang#78298
Updates golang#78178
Updates golang#75528
Updates golang#75166
Updates golang#76112

Change-Id: Ie78f3bf5f0b232482da44aba28a0f6d66a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/759383
Reviewed-by: David Chase <drchase@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Daniel McCarney <daniel@binaryparadox.net>
Reviewed-by: Mark Freeman <markfreeman@google.com>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
(cherry picked from commit 3103a23)
Reviewed-on: https://go-review.googlesource.com/c/go/+/771961
Reviewed-by: Michael Pratt <mpratt@google.com>
Commit-Queue: Michael Pratt <mpratt@google.com>
Reviewed-by: Roland Shoemaker <roland@golang.org>
Auto-Submit: Michael Pratt <mpratt@google.com>
…stems

The nsec field of timespec is a C long even when using
64bits time on 32bits systems.

This is because by timespec API if nsec never holds more than a
second worth of nanoseconds.
If it would theses would increment the sec field while the nsec
field would get the amount of nanoseconds modulus a second.

For golang#77934
Fixes golang#77935

Change-Id: I9803998ba70123eb3b226379bd72b11cae972c38
Reviewed-on: https://go-review.googlesource.com/c/go/+/751341
Reviewed-by: Michael Pratt <mpratt@google.com>
Auto-Submit: Jorropo <jorropo.pgm@gmail.com>
Reviewed-by: David Chase <drchase@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit ba402cd)
Reviewed-on: https://go-review.googlesource.com/c/go/+/772020
Auto-Submit: Michael Pratt <mpratt@google.com>
Reviewed-by: Jorropo <jorropo.pgm@gmail.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Updates golang#78982
Updates golang#78984

Change-Id: Ic91104597bdb6c77f9885159ce2e3ddc6a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/771203
Reviewed-by: Roland Shoemaker <roland@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
…-c2097c7c

Updates golang#78982
Fixes golang#78984

Change-Id: I37dd130b18026d5830348ad67de465eb6a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/771204
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Roland Shoemaker <roland@golang.org>
…ndling large DNS response

No test, unfortunately: I've had no luck triggering this without
the ability to override the local recursive resolver.

Thanks to hamayanhamayan for reporting this issue.

Fixes CVE-2026-33811
Fixes golang#78813
For golang#78803

Change-Id: I9e51410337316c20e4b9fd5b86657f436a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/767860
Reviewed-by: Nicholas Husin <nsh@golang.org>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Nicholas Husin <husin@google.com>
(cherry picked from commit ab2c7eb)
Reviewed-on: https://go-review.googlesource.com/c/go/+/767542
For golang#77879
Fixes golang#79021

Change-Id: I07c2fade6a5a49dd6abd53cb474462b16a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/771360
TryBot-Bypass: Dmitri Shuralyov <dmitshur@golang.org>
Auto-Submit: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Carlos Amedee <carlos@golang.org>
Reviewed-by: Daniel McCarney <daniel@binaryparadox.net>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
(cherry picked from commit f0f2768)
Reviewed-on: https://go-review.googlesource.com/c/go/+/772200
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Roland Shoemaker <roland@golang.org>
…th line directives

The Go loop variable semantics changed in Go 1.22: loop variables are now
created per-iteration instead of per-loop. The compiler decides which
semantics to use based on the Go version in go.mod.

When go.mod specifies go 1.21 and the code is built with a Go 1.22+
compiler, the per-loop(compatible behavior) semantics should be used.

However, when a line directive is present in the source file,
go.mod 1.21 and go1.22+ compiler outputs a per-iteration semantics.

For example, the file below wants output 333 but got 012.

    -- go.mod --
    module test
    go 1.21
    -- main.go --
    //line main.go:1
    func main() {
            var fns []func()
            for i := 0; i < 3; i++ {
                    fns = append(fns, func() { fmt.Print(i) })
            }
            for _, fn := range fns {
                    fn()
            }
    }

The distinctVars function uses stmt.Pos().Base() to look up the file
version in FileVersions. Base() returns the file name after line
directives are applied (e.g., "main.go" for "//line main.go:1"), not
the actual source file path. This causes the version lookup to fail
for files with line directives.

This CL fixes the bug by using stmt.Pos().FileBase() instead. FileBase()
returns the actual file path before line directives are applied, ensuring
the correct version information is retrieved from the original source file.

For golang#77248
Fixes golang#77297

Change-Id: Idacc0816d112ee393089262468a02acfe40e4b72
Reviewed-on: https://go-review.googlesource.com/c/go/+/737820
Reviewed-by: Keith Randall <khr@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
(cherry picked from commit b408256)
Reviewed-on: https://go-review.googlesource.com/c/go/+/772104
Reviewed-by: David Chase <drchase@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
…Comment

consumeComment builds the comment string by repeated string
concatenation inside a loop. Each concatenation copies the
entire string built so far, making the function O(n^2) in the
depth of nested comments.

Replace the concatenation with a strings.Builder, which
amortizes allocation by doubling its internal buffer. This
reduces consumeComment from O(n^2) to O(n).

This is the same bug class as the consumeDomainLiteral fix
in CVE-2025-61725.

Benchmark results (benchstat, 8 runs):

  name                        old time/op  new time/op  delta
  ConsumeComment/depth10      2.481us      1.838us      -25.92%
  ConsumeComment/depth100     86.58us      6.498us      -92.50%
  ConsumeComment/depth1000    7.963ms      52.82us      -99.34%
  ConsumeComment/depth10000   897.8ms      521.3us      -99.94%

The quadratic cost becomes visible at depth 100 and dominant
by depth 1000. At depth 10000, the fix is roughly 1700x
faster.

For golang#78566
Fixes golang#78568

Change-Id: I3c927f02646fcab7bab167cb82fd46d3327d6d34
GitHub-Last-Rev: 7742dad
GitHub-Pull-Request: golang#78393
Reviewed-on: https://go-review.googlesource.com/c/go/+/759940
Reviewed-by: Sean Liao <sean@liao.dev>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Sean Liao <sean@liao.dev>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Junyang Shao <shaojunyang@google.com>
(cherry picked from commit 0d0799f)
Reviewed-on: https://go-review.googlesource.com/c/go/+/763800
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
…ory components

Do not write to /etc/passwd when running "go tool pack x evil.a"
on an archive containing a file named /etc/passwd.

For golang#78778
Fixes golang#78791

Change-Id: I4cf69b81af62321ffbb41ace679672a86a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/767520
Reviewed-by: Nicholas Husin <nsh@golang.org>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Nicholas Husin <husin@google.com>
(cherry picked from commit 7409ada)
Reviewed-on: https://go-review.googlesource.com/c/go/+/767661
…ontent attributes

The WHATWG "shared declarative refresh steps" algorithm (§4.2.5.3)
skips ASCII whitespace between "url" and "=" when parsing the URL
portion of a meta content attribute.

Thank you to Samy Ghannad for reporting this issue.

Updates golang#78913
Fixes golang#79032
Fixes CVE-2026-39823

Change-Id: I7fc3bb9394b95e07b9b10fbc95725a3de6791774
Reviewed-on: https://go-review.googlesource.com/c/go/+/769920
Reviewed-by: Roland Shoemaker <roland@golang.org>
TryBot-Bypass: Roland Shoemaker <roland@golang.org>
(cherry picked from commit f2ec125)
Reviewed-on: https://go-review.googlesource.com/c/go/+/772103
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
…e a symlink

Fix a case where RemoveAll directly returned the error returned
from openDirAt. When the target of openDirAt is a symlink,
it returns an internal-use-only errSymlink error. This error
panics when printed, to catch misuse of openDirAt.

Fix RemoveAll to detect and handle the errSymlink return.

For golang#78490
Fixes golang#78867

Change-Id: Ibd857280bfca1feb50c163a6e4b192716a6a6964
Reviewed-on: https://go-review.googlesource.com/c/go/+/763520
Reviewed-by: Nicholas Husin <husin@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Nicholas Husin <nsh@golang.org>
(cherry picked from commit 5ddbf4b)
Reviewed-on: https://go-review.googlesource.com/c/go/+/769021
Reviewed-by: Robert Griesemer <gri@google.com>
The current bloop pass implementation skips blank nodes silently. This
CL makes it aware of that and keep them alive in temps.

For golang#77654.
Fixes golang#78155.

Change-Id: Iaffa5194ba1f0fe8d7c80a4c8e5c9a65a47bf534
Reviewed-on: https://go-review.googlesource.com/c/go/+/754920
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-on: https://go-review.googlesource.com/c/go/+/772122
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
Auto-Submit: Junyang Shao <shaojunyang@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
…dependencies change

When running tests with -cover and -coverpkg, the resulting coverage
profile includes data from all packages specified in -coverpkg, not
just the test package. Previously, the test cache key did not account
for changes in these out-of-band covered packages, causing stale
coverage profiles to be reused even when source files in covered
packages were modified.

Fix this by hashing the BuildActionIDs of the writeCoverMetaAct's
dependencies (the compile actions for all covered packages) and
incorporating that hash into the coverage profile cache key via
cache.Subkey.

The covMeta hash is now computed directly in tryCacheWithID by
locating the "write coverage meta-data file" action among the run
action's dependencies, keeping all cache logic in one place. When
-coverpkg is used without -coverprofile, a sentinel cache entry is
written so the cache can still detect when covered packages change.

Fixes golang#78583
For golang#74873

Change-Id: Ice84557789e325330759442689d0e28f871858bb
GitHub-Last-Rev: 84aa537
GitHub-Pull-Request: golang#74773
Reviewed-on: https://go-review.googlesource.com/c/go/+/690775
Reviewed-by: David Chase <drchase@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Matloob <matloob@google.com>
Reviewed-by: Michael Matloob <matloob@golang.org>
Reviewed-on: https://go-review.googlesource.com/c/go/+/764360
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Updates golang#78987
Fixes golang#79004
Fixes CVE-2026-42499

Change-Id: I8438e5dee7e6433573d4161baf8fb2151e7fbc2f
Reviewed-on: https://go-review.googlesource.com/c/go/+/771520
Reviewed-by: Nicholas Husin <husin@google.com>
Reviewed-by: Nicholas Husin <nsh@golang.org>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
(cherry picked from commit 2c59389)
Reviewed-on: https://go-review.googlesource.com/c/go/+/772121
Auto-Submit: Michael Pratt <mpratt@google.com>
The syscall.UTF16PtrFromString function panics when
provided with an input containing a NUL character.
Replace with syscall.UTF16PtrFromString.

Fixes potential panics in net.Dial, net.LookupPort,
and syscall.Readlink.

Fixes CVE-2026-39836
Updates golang#79006
Fixes golang#79029

Change-Id: I2fd7bb750d27474047f199faca4061466a6a6964
Reviewed-on: https://go-internal-review.googlesource.com/c/go/+/4260
Reviewed-by: Nicholas Husin <husin@google.com>
Reviewed-by: Neal Patel <nealpatel@google.com>
Reviewed-on: https://go-internal-review.googlesource.com/c/go/+/4440
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/775162
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
TryBot-Bypass: Gopher Robot <gobot@golang.org>
Auto-Submit: Gopher Robot <gobot@golang.org>
…hash

Report an error when a sumdb /lookup/ request does not
include a hash for the requested module, rather than
silently proceeding.

Previously, we would verify that a returned sum matched
the expected module hash, but did not verify that the
response contained a sum. This permits a malicous
proxy to serve a corrupted module along with a
valid-but-irrelevant sumdb response for some other
module. We now ensure that the sumdb response contains
a valid hash for the module we are validating.

Thanks to Mundur (https://github.com/M0nd0R) for reporting this issue.

Fixes CVE-2026-42501
Updates golang#79070
Fixes golang#79073

Change-Id: I7d9a367deb237aa70cade2434495998f6a6a6964
Reviewed-on: https://go-internal-review.googlesource.com/c/go/+/4340
Reviewed-by: Nicholas Husin <husin@google.com>
Reviewed-by: Neal Patel <nealpatel@google.com>
Reviewed-on: https://go-internal-review.googlesource.com/c/go/+/4420
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/775163
Reviewed-by: Michael Pratt <mpratt@google.com>
Auto-Submit: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
TryBot-Bypass: Gopher Robot <gobot@golang.org>
gopherbot and others added 2 commits May 7, 2026 09:14
Change-Id: Ifcfb963f256eff89bc1c447b0dd7471d9cd46cc5
Reviewed-on: https://go-review.googlesource.com/c/go/+/775261
Auto-Submit: Gopher Robot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
TryBot-Bypass: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
@bradfitz bradfitz requested a review from awly May 7, 2026 21:14
@bradfitz bradfitz merged commit e877d97 into tailscale.go1.26 May 7, 2026
4 checks passed
@bradfitz bradfitz deleted the bradfitz/go1.26.3 branch May 7, 2026 21:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.