diff --git a/.gitignore b/.gitignore index 4541b61..da8c030 100644 --- a/.gitignore +++ b/.gitignore @@ -168,10 +168,8 @@ /go1.24.5.src.tar.gz /go1.25rc1.src.tar.gz /go1.25rc2.src.tar.gz -/go1.25.0.src.tar.gz /go1.25.1.src.tar.gz /go1.25.2.src.tar.gz /go1.25.3.src.tar.gz /go1.25.4.src.tar.gz /go1.25.5.src.tar.gz -/go1.26rc1.src.tar.gz diff --git a/.packit.yaml b/.packit.yaml index ab570c5..f05ef2c 100644 --- a/.packit.yaml +++ b/.packit.yaml @@ -12,23 +12,24 @@ actions: - bash -c "echo - New release ${PACKIT_PROJECT_VERSION}" jobs: + # Fedora 41 follows Go 1.24 + # https://pagure.io/fesco/issue/3435 + - job: pull_from_upstream + trigger: release + dist_git_branches: fedora-41 + upstream_tag_include: "^go1.24.+" + # Fedora 42 follows Go 1.24 - job: pull_from_upstream trigger: release dist_git_branches: fedora-42 upstream_tag_include: "^go1.24.+" - # Fedora 43 follows Go 1.25 - - job: pull_from_upstream - trigger: release - dist_git_branches: fedora-43 - upstream_tag_include: "^go1.25.+" - # Fedora Rawhide follows the latest version - job: pull_from_upstream trigger: release dist_git_branches: fedora-rawhide - upstream_tag_include: "^go1.26.+" + upstream_tag_include: "^go1.25.+" # Run Koji builds when Packit pull requests are merged - job: koji_build diff --git a/ff2636f.patch b/ff2636f.patch new file mode 100644 index 0000000..5baed13 --- /dev/null +++ b/ff2636f.patch @@ -0,0 +1,234 @@ +From ff2636f45e0087a1c6d8e895257d9c4729710811 Mon Sep 17 00:00:00 2001 +From: Michael Pratt +Date: Thu, 03 Apr 2025 03:26:25 +0000 +Subject: [PATCH] [release-branch.go1.24] runtime: cleanup M vgetrandom state before dropping P + +When an M is destroyed, we put its vgetrandom state back on the shared +list for another M to reuse. This list is simply a slice, so appending +to the slice may allocate. Currently this operation is performed in +mdestroy, after the P is released, meaning allocation is not allowed. + +More the cleanup earlier in mdestroy when allocation is still OK. + +Also add //go:nowritebarrierrec to mdestroy since it runs without a P, +which would have caught this bug. + +Fixes #73144. +For #73141. + +Change-Id: I6a6a636c3fbf5c6eec09d07a260e39dbb4d2db12 +Reviewed-on: https://go-review.googlesource.com/c/go/+/662455 +Reviewed-by: Jason Donenfeld +LUCI-TryBot-Result: Go LUCI +Reviewed-by: Keith Randall +Reviewed-by: Keith Randall +(cherry picked from commit 0b31e6d4cc804ab76ae8ced151ee2f50657aec14) +--- + +diff --git a/src/runtime/os3_solaris.go b/src/runtime/os3_solaris.go +index cf163a6..ded821b 100644 +--- a/src/runtime/os3_solaris.go ++++ b/src/runtime/os3_solaris.go +@@ -234,8 +234,11 @@ + getg().m.procid = 0 + } + +-// Called from exitm, but not from drop, to undo the effect of thread-owned ++// Called from mexit, but not from dropm, to undo the effect of thread-owned + // resources in minit, semacreate, or elsewhere. Do not take locks after calling this. ++// ++// This always runs without a P, so //go:nowritebarrierrec is required. ++//go:nowritebarrierrec + func mdestroy(mp *m) { + } + +diff --git a/src/runtime/os_aix.go b/src/runtime/os_aix.go +index 93464cb..1b483c2 100644 +--- a/src/runtime/os_aix.go ++++ b/src/runtime/os_aix.go +@@ -186,8 +186,11 @@ + getg().m.procid = 0 + } + +-// Called from exitm, but not from drop, to undo the effect of thread-owned ++// Called from mexit, but not from dropm, to undo the effect of thread-owned + // resources in minit, semacreate, or elsewhere. Do not take locks after calling this. ++// ++// This always runs without a P, so //go:nowritebarrierrec is required. ++//go:nowritebarrierrec + func mdestroy(mp *m) { + } + +diff --git a/src/runtime/os_darwin.go b/src/runtime/os_darwin.go +index 0ecbea7..6eab3b5 100644 +--- a/src/runtime/os_darwin.go ++++ b/src/runtime/os_darwin.go +@@ -344,8 +344,11 @@ + getg().m.procid = 0 + } + +-// Called from exitm, but not from drop, to undo the effect of thread-owned ++// Called from mexit, but not from dropm, to undo the effect of thread-owned + // resources in minit, semacreate, or elsewhere. Do not take locks after calling this. ++// ++// This always runs without a P, so //go:nowritebarrierrec is required. ++//go:nowritebarrierrec + func mdestroy(mp *m) { + } + +diff --git a/src/runtime/os_dragonfly.go b/src/runtime/os_dragonfly.go +index a02696e..9b32350 100644 +--- a/src/runtime/os_dragonfly.go ++++ b/src/runtime/os_dragonfly.go +@@ -216,8 +216,11 @@ + getg().m.procid = 0 + } + +-// Called from exitm, but not from drop, to undo the effect of thread-owned ++// Called from mexit, but not from dropm, to undo the effect of thread-owned + // resources in minit, semacreate, or elsewhere. Do not take locks after calling this. ++// ++// This always runs without a P, so //go:nowritebarrierrec is required. ++//go:nowritebarrierrec + func mdestroy(mp *m) { + } + +diff --git a/src/runtime/os_linux.go b/src/runtime/os_linux.go +index 8b3c4d0..fb46b81 100644 +--- a/src/runtime/os_linux.go ++++ b/src/runtime/os_linux.go +@@ -412,13 +412,12 @@ + getg().m.procid = 0 + } + +-// Called from exitm, but not from drop, to undo the effect of thread-owned ++// Called from mexit, but not from dropm, to undo the effect of thread-owned + // resources in minit, semacreate, or elsewhere. Do not take locks after calling this. ++// ++// This always runs without a P, so //go:nowritebarrierrec is required. ++//go:nowritebarrierrec + func mdestroy(mp *m) { +- if mp.vgetrandomState != 0 { +- vgetrandomPutState(mp.vgetrandomState) +- mp.vgetrandomState = 0 +- } + } + + // #ifdef GOARCH_386 +diff --git a/src/runtime/os_netbsd.go b/src/runtime/os_netbsd.go +index 735ace2..a06e5fe 100644 +--- a/src/runtime/os_netbsd.go ++++ b/src/runtime/os_netbsd.go +@@ -320,8 +320,11 @@ + // must continue working after unminit. + } + +-// Called from exitm, but not from drop, to undo the effect of thread-owned ++// Called from mexit, but not from dropm, to undo the effect of thread-owned + // resources in minit, semacreate, or elsewhere. Do not take locks after calling this. ++// ++// This always runs without a P, so //go:nowritebarrierrec is required. ++//go:nowritebarrierrec + func mdestroy(mp *m) { + } + +diff --git a/src/runtime/os_openbsd.go b/src/runtime/os_openbsd.go +index 574bfa8..4ce4c3c 100644 +--- a/src/runtime/os_openbsd.go ++++ b/src/runtime/os_openbsd.go +@@ -182,8 +182,11 @@ + getg().m.procid = 0 + } + +-// Called from exitm, but not from drop, to undo the effect of thread-owned ++// Called from mexit, but not from dropm, to undo the effect of thread-owned + // resources in minit, semacreate, or elsewhere. Do not take locks after calling this. ++// ++// This always runs without a P, so //go:nowritebarrierrec is required. ++//go:nowritebarrierrec + func mdestroy(mp *m) { + } + +diff --git a/src/runtime/os_plan9.go b/src/runtime/os_plan9.go +index 2dbb42a..3b5965a 100644 +--- a/src/runtime/os_plan9.go ++++ b/src/runtime/os_plan9.go +@@ -217,8 +217,11 @@ + func unminit() { + } + +-// Called from exitm, but not from drop, to undo the effect of thread-owned ++// Called from mexit, but not from dropm, to undo the effect of thread-owned + // resources in minit, semacreate, or elsewhere. Do not take locks after calling this. ++// ++// This always runs without a P, so //go:nowritebarrierrec is required. ++//go:nowritebarrierrec + func mdestroy(mp *m) { + } + +diff --git a/src/runtime/os_windows.go b/src/runtime/os_windows.go +index 7183e79..54407a3 100644 +--- a/src/runtime/os_windows.go ++++ b/src/runtime/os_windows.go +@@ -906,9 +906,11 @@ + mp.procid = 0 + } + +-// Called from exitm, but not from drop, to undo the effect of thread-owned ++// Called from mexit, but not from dropm, to undo the effect of thread-owned + // resources in minit, semacreate, or elsewhere. Do not take locks after calling this. + // ++// This always runs without a P, so //go:nowritebarrierrec is required. ++//go:nowritebarrierrec + //go:nosplit + func mdestroy(mp *m) { + if mp.highResTimer != 0 { +diff --git a/src/runtime/proc.go b/src/runtime/proc.go +index e9873e5..21bee4d 100644 +--- a/src/runtime/proc.go ++++ b/src/runtime/proc.go +@@ -1935,6 +1935,9 @@ + mp.gsignal = nil + } + ++ // Free vgetrandom state. ++ vgetrandomDestroy(mp) ++ + // Remove m from allm. + lock(&sched.lock) + for pprev := &allm; *pprev != nil; pprev = &(*pprev).alllink { +diff --git a/src/runtime/vgetrandom_linux.go b/src/runtime/vgetrandom_linux.go +index a6ec4b7..40be022 100644 +--- a/src/runtime/vgetrandom_linux.go ++++ b/src/runtime/vgetrandom_linux.go +@@ -73,9 +73,16 @@ + return state + } + +-func vgetrandomPutState(state uintptr) { ++// Free vgetrandom state from the M (if any) prior to destroying the M. ++// ++// This may allocate, so it must have a P. ++func vgetrandomDestroy(mp *m) { ++ if mp.vgetrandomState == 0 { ++ return ++ } ++ + lock(&vgetrandomAlloc.statesLock) +- vgetrandomAlloc.states = append(vgetrandomAlloc.states, state) ++ vgetrandomAlloc.states = append(vgetrandomAlloc.states, mp.vgetrandomState) + unlock(&vgetrandomAlloc.statesLock) + } + +diff --git a/src/runtime/vgetrandom_unsupported.go b/src/runtime/vgetrandom_unsupported.go +index 070392c..43c53e1 100644 +--- a/src/runtime/vgetrandom_unsupported.go ++++ b/src/runtime/vgetrandom_unsupported.go +@@ -13,6 +13,6 @@ + return -1, false + } + +-func vgetrandomPutState(state uintptr) {} ++func vgetrandomDestroy(mp *m) {} + + func vgetrandomInit() {} diff --git a/golang.spec b/golang.spec index ba57da1..68b6b52 100644 --- a/golang.spec +++ b/golang.spec @@ -99,9 +99,9 @@ %endif # Comment out go_prerelease and go_patch as needed -%global go_api 1.26 -%global go_prerelease rc1 -#global go_patch 1 +%global go_api 1.25 +#global go_prerelease rc2 +%global go_patch 5 %global go_version %{go_api}%{?go_patch:.%{go_patch}}%{?go_prerelease:~%{go_prerelease}} %global go_source %{go_api}%{?go_patch:.%{go_patch}}%{?go_prerelease} @@ -123,7 +123,11 @@ BuildRequires: gcc-go >= 5 %else BuildRequires: golang > 1.4 %endif +%if 0%{?rhel} > 6 || 0%{?fedora} > 0 BuildRequires: hostname +%else +BuildRequires: net-tools +%endif # for tests BuildRequires: pcre2-devel, glibc-static, perl-interpreter, procps-ng @@ -131,20 +135,20 @@ BuildRequires: pcre2-devel, glibc-static, perl-interpreter, procps-ng Provides: go = %{version}-%{release} # Bundled/Vendored provides generated by bundled-deps.sh based on the in tree module data -Provides: bundled(golang(github.com/google/pprof)) = 0.0.0.20251114195745.4902fdda35c8 -Provides: bundled(golang(github.com/ianlancetaylor/demangle)) = 0.0.0.20250417193237.f615e6bd150b -Provides: bundled(golang(golang.org/x/arch)) = 0.23.0 -Provides: bundled(golang(golang.org/x/build)) = 0.0.0.20251128064159.b9bfd88b30e8 -Provides: bundled(golang(golang.org/x/crypto)) = 0.46.1.0.20251210140736.7dacc380ba00 -Provides: bundled(golang(golang.org/x/mod)) = 0.30.1.0.20251115032019.269c237cf350 -Provides: bundled(golang(golang.org/x/net)) = 0.47.1.0.20251128220604.7c360367ab7e -Provides: bundled(golang(golang.org/x/sync)) = 0.19.0 -Provides: bundled(golang(golang.org/x/sys)) = 0.39.0 -Provides: bundled(golang(golang.org/x/telemetry)) = 0.0.0.20251128220624.abf20d0e57ec -Provides: bundled(golang(golang.org/x/term)) = 0.38.0 -Provides: bundled(golang(golang.org/x/text)) = 0.32.0 +Provides: bundled(golang(github.com/google/pprof)) = 0.0.0.20250208200701.d0013a598941 +Provides: bundled(golang(github.com/ianlancetaylor/demangle)) = 0.0.0.20240912202439.0a2b6291aafd +Provides: bundled(golang(golang.org/x/arch)) = 0.18.1.0.20250605182141.b2f4e2807dec +Provides: bundled(golang(golang.org/x/build)) = 0.0.0.20250606033421.8c8ff6f34a83 +Provides: bundled(golang(golang.org/x/crypto)) = 0.39.0 +Provides: bundled(golang(golang.org/x/mod)) = 0.25.0 +Provides: bundled(golang(golang.org/x/net)) = 0.41.0 +Provides: bundled(golang(golang.org/x/sync)) = 0.15.0 +Provides: bundled(golang(golang.org/x/sys)) = 0.33.0 +Provides: bundled(golang(golang.org/x/telemetry)) = 0.0.0.20250606142133.60998feb31a8 +Provides: bundled(golang(golang.org/x/term)) = 0.32.0 +Provides: bundled(golang(golang.org/x/text)) = 0.26.0 Provides: bundled(golang(golang.org/x/tools)) = 0.27.0 -Provides: bundled(golang(golang.org/x/tools)) = 0.39.1.0.20251205000126.062ef7b6ced2 +Provides: bundled(golang(golang.org/x/tools)) = 0.34.0 Provides: bundled(golang(rsc.io/markdown)) = 0.0.0.20240306144322.0bf8f97ee8ef Requires: %{name}-bin = %{version}-%{release} @@ -252,8 +256,11 @@ Requires(preun): %{_sbindir}/update-alternatives # This is an odd issue, still looking for a better fix. Requires: glibc Requires: gcc -Recommends: git-core, subversion, mercurial - +%if 0%{?rhel} && 0%{?rhel} < 8 +Requires: git, subversion, mercurial +%else +Recommends: git, subversion, mercurial +%endif %description bin %{summary} diff --git a/sources b/sources index dfecfe3..6e447e8 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (go1.26rc1.src.tar.gz) = 6696ee765dcde64b830b14e20a5fdf6324916211bff80a62d0db0cbef58bb0856f02e88e95b2f1a3ad6d9282ebd04a377a0b000d56849576caedbd526c9a7923 +SHA512 (go1.25.5.src.tar.gz) = 97ec368521253bce610e1e3a6f10460f4a38eba440289553a40ab27afcdf2bb9b426d150ffaa3be8db50e84a00a4eb723a631ebc4f39168bc133bf7b2f1ccf66