From 762b89ceebbea1fa58c68c24c748f268fcfbb08f Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 1 Jul 2026 10:27:58 +0200 Subject: [PATCH 1/5] pkg/kernelversion: use unix.ByteSliceToString for utsname fields similar to [moby@8a5c131] [moby@8a5c131]: https://github.com/moby/moby/commit/8a5c13155e3d94fcbc8e7642738df0fefceeb96b Signed-off-by: Sebastiaan van Stijn --- pkg/kernelversion/kernel_linux.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/kernelversion/kernel_linux.go b/pkg/kernelversion/kernel_linux.go index a8cec6481f986..d2f23bf3b15f2 100644 --- a/pkg/kernelversion/kernel_linux.go +++ b/pkg/kernelversion/kernel_linux.go @@ -22,7 +22,6 @@ package kernelversion import ( - "bytes" "fmt" "sync" @@ -56,8 +55,8 @@ func getKernelVersion() (*KernelVersion, error) { if err := unix.Uname(&uts); err != nil { return } - // Remove the \x00 from the release for Atoi to parse correctly - currentKernelVersion, kernelVersionError = parseRelease(string(uts.Release[:bytes.IndexByte(uts.Release[:], 0)])) + // Convert the NUL-terminated release field before parsing. + currentKernelVersion, kernelVersionError = parseRelease(unix.ByteSliceToString(uts.Release[:])) }) return currentKernelVersion, kernelVersionError } From 5e3e05aec7f54689f588166ee6bf790427a19e15 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 1 Jul 2026 10:31:43 +0200 Subject: [PATCH 2/5] pkg/kernelversion: fix minor linting issues Signed-off-by: Sebastiaan van Stijn --- pkg/kernelversion/kernel_linux.go | 2 +- pkg/kernelversion/kernel_linux_test.go | 28 +++++++++++++------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/pkg/kernelversion/kernel_linux.go b/pkg/kernelversion/kernel_linux.go index d2f23bf3b15f2..b224846a5e77e 100644 --- a/pkg/kernelversion/kernel_linux.go +++ b/pkg/kernelversion/kernel_linux.go @@ -63,7 +63,7 @@ func getKernelVersion() (*KernelVersion, error) { // parseRelease parses a string and creates a KernelVersion based on it. func parseRelease(release string) (*KernelVersion, error) { - var version = KernelVersion{} + var version KernelVersion // We're only make sure we get the "kernel" and "major revision". Sometimes we have // 3.12.25-gentoo, but sometimes we just have 3.12-1-amd64. diff --git a/pkg/kernelversion/kernel_linux_test.go b/pkg/kernelversion/kernel_linux_test.go index 8f21feef2069c..d0bad9bca67c8 100644 --- a/pkg/kernelversion/kernel_linux_test.go +++ b/pkg/kernelversion/kernel_linux_test.go @@ -22,7 +22,7 @@ package kernelversion import ( - "fmt" + "errors" "testing" ) @@ -55,19 +55,19 @@ func TestParseRelease(t *testing.T) { {in: "3.12-1-amd64", out: KernelVersion{Kernel: 3, Major: 12}}, {in: "3.12foobar", out: KernelVersion{Kernel: 3, Major: 12}}, {in: "99.999.999-19-generic", out: KernelVersion{Kernel: 99, Major: 999}}, - {in: "", expectedErr: fmt.Errorf(`failed to parse kernel version "": EOF`)}, - {in: "3", expectedErr: fmt.Errorf(`failed to parse kernel version "3": unexpected EOF`)}, - {in: "3.", expectedErr: fmt.Errorf(`failed to parse kernel version "3.": EOF`)}, - {in: "3a", expectedErr: fmt.Errorf(`failed to parse kernel version "3a": input does not match format`)}, - {in: "3.a", expectedErr: fmt.Errorf(`failed to parse kernel version "3.a": expected integer`)}, - {in: "a", expectedErr: fmt.Errorf(`failed to parse kernel version "a": expected integer`)}, - {in: "a.a", expectedErr: fmt.Errorf(`failed to parse kernel version "a.a": expected integer`)}, - {in: "a.a.a-a", expectedErr: fmt.Errorf(`failed to parse kernel version "a.a.a-a": expected integer`)}, - {in: "-3", expectedErr: fmt.Errorf(`failed to parse kernel version "-3": expected integer`)}, - {in: "-3.", expectedErr: fmt.Errorf(`failed to parse kernel version "-3.": expected integer`)}, - {in: "-3.8", expectedErr: fmt.Errorf(`failed to parse kernel version "-3.8": expected integer`)}, - {in: "-3.-8", expectedErr: fmt.Errorf(`failed to parse kernel version "-3.-8": expected integer`)}, - {in: "3.-8", expectedErr: fmt.Errorf(`failed to parse kernel version "3.-8": expected integer`)}, + {in: "", expectedErr: errors.New(`failed to parse kernel version "": EOF`)}, + {in: "3", expectedErr: errors.New(`failed to parse kernel version "3": unexpected EOF`)}, + {in: "3.", expectedErr: errors.New(`failed to parse kernel version "3.": EOF`)}, + {in: "3a", expectedErr: errors.New(`failed to parse kernel version "3a": input does not match format`)}, + {in: "3.a", expectedErr: errors.New(`failed to parse kernel version "3.a": expected integer`)}, + {in: "a", expectedErr: errors.New(`failed to parse kernel version "a": expected integer`)}, + {in: "a.a", expectedErr: errors.New(`failed to parse kernel version "a.a": expected integer`)}, + {in: "a.a.a-a", expectedErr: errors.New(`failed to parse kernel version "a.a.a-a": expected integer`)}, + {in: "-3", expectedErr: errors.New(`failed to parse kernel version "-3": expected integer`)}, + {in: "-3.", expectedErr: errors.New(`failed to parse kernel version "-3.": expected integer`)}, + {in: "-3.8", expectedErr: errors.New(`failed to parse kernel version "-3.8": expected integer`)}, + {in: "-3.-8", expectedErr: errors.New(`failed to parse kernel version "-3.-8": expected integer`)}, + {in: "3.-8", expectedErr: errors.New(`failed to parse kernel version "3.-8": expected integer`)}, } for _, tc := range tests { t.Run(tc.in, func(t *testing.T) { From c45f911980ca2e7582333898f28bc1086c09d3fd Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 1 Jul 2026 10:34:24 +0200 Subject: [PATCH 3/5] pkg/kernelversion: simplify code with sync.OnceValues Signed-off-by: Sebastiaan van Stijn --- pkg/kernelversion/kernel_linux.go | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/pkg/kernelversion/kernel_linux.go b/pkg/kernelversion/kernel_linux.go index b224846a5e77e..ddb906ed98eb8 100644 --- a/pkg/kernelversion/kernel_linux.go +++ b/pkg/kernelversion/kernel_linux.go @@ -42,24 +42,15 @@ func (k *KernelVersion) String() string { return "" } -var ( - currentKernelVersion *KernelVersion - kernelVersionError error - once sync.Once -) - // getKernelVersion gets the current kernel version. -func getKernelVersion() (*KernelVersion, error) { - once.Do(func() { - var uts unix.Utsname - if err := unix.Uname(&uts); err != nil { - return - } - // Convert the NUL-terminated release field before parsing. - currentKernelVersion, kernelVersionError = parseRelease(unix.ByteSliceToString(uts.Release[:])) - }) - return currentKernelVersion, kernelVersionError -} +var getKernelVersion = sync.OnceValues(func() (*KernelVersion, error) { + var uts unix.Utsname + if err := unix.Uname(&uts); err != nil { + return nil, err + } + // Convert the NUL-terminated release field before parsing. + return parseRelease(unix.ByteSliceToString(uts.Release[:])) +}) // parseRelease parses a string and creates a KernelVersion based on it. func parseRelease(release string) (*KernelVersion, error) { From 296f917d5da0eaae4c12037240faa2d40b14a84d Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 1 Jul 2026 10:58:54 +0200 Subject: [PATCH 4/5] pkg/kernelversion: update links to upstream source The package was moved to a separate module; update the links to make it easier to discover the current version of upstream. Signed-off-by: Sebastiaan van Stijn --- pkg/kernelversion/kernel_linux.go | 10 ++++++---- pkg/kernelversion/kernel_linux_test.go | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/pkg/kernelversion/kernel_linux.go b/pkg/kernelversion/kernel_linux.go index ddb906ed98eb8..153f71e1c9bf6 100644 --- a/pkg/kernelversion/kernel_linux.go +++ b/pkg/kernelversion/kernel_linux.go @@ -14,10 +14,12 @@ limitations under the License. */ -/* - File copied and customized based on - https://github.com/moby/moby/tree/v20.10.14/profiles/seccomp/kernel_linux.go -*/ +// SPDX-FileCopyrightText: Copyright The containerd Authors +// SPDX-FileCopyrightText: Copyright The Moby Authors +// SPDX-License-Identifier: Apache-2.0 +// +// File copied and customized based on +// https://github.com/moby/profiles/blob/seccomp/v0.2.3/seccomp/kernel_linux.go package kernelversion diff --git a/pkg/kernelversion/kernel_linux_test.go b/pkg/kernelversion/kernel_linux_test.go index d0bad9bca67c8..8c78485590284 100644 --- a/pkg/kernelversion/kernel_linux_test.go +++ b/pkg/kernelversion/kernel_linux_test.go @@ -14,10 +14,12 @@ limitations under the License. */ -/* - File copied and customized based on - https://github.com/moby/moby/tree/v20.10.14/profiles/seccomp/kernel_linux_test.go -*/ +// SPDX-FileCopyrightText: Copyright The containerd Authors +// SPDX-FileCopyrightText: Copyright The Moby Authors +// SPDX-License-Identifier: Apache-2.0 +// +// File copied and customized based on +// https://github.com/moby/profiles/blob/seccomp/v0.2.3/seccomp/kernel_linux_test.go package kernelversion From 4f9bae6776084facc8e3de384d0abd50731f0700 Mon Sep 17 00:00:00 2001 From: Maksym Pavlenko Date: Thu, 2 Jul 2026 15:44:54 -0700 Subject: [PATCH 5/5] Update stale PR policy Signed-off-by: Maksym Pavlenko --- .github/workflows/stale.yml | 52 +++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 6aa13cf6c8d38..e1b07713052ab 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,10 +1,10 @@ -name: 'Close stale issues and PRs' +name: "Close stale issues and PRs" on: schedule: - cron: "0 0 * * *" # Every day at midnight pull_request: paths: - - '.github/workflows/stale.yml' + - ".github/workflows/stale.yml" permissions: contents: read @@ -23,19 +23,37 @@ jobs: - uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0 # All stale bot options: https://github.com/actions/stale#all-options with: - # Idle number of days before marking issues/PRs stale - days-before-stale: 90 - # Idle number of days before closing stale issues/PRs - days-before-close: 7 - # Only issues/PRs with ANY of these labels are checked - any-of-labels: 'status/more-info-needed,status/needs-update,needs-rebase' - # Comment on the staled issues - stale-issue-message: 'This issue is stale because it has been open 90 days with no activity. This issue will be closed in 7 days unless new comments are made or the stale label is removed.' - # Comment on the staled PRs - stale-pr-message: 'This PR is stale because it has been open 90 days with no activity. This PR will be closed in 7 days unless new comments are made or the stale label is removed.' - # Comment on the staled issues while closed - close-issue-message: 'This issue was closed because it has been stalled for 7 days with no activity.' - # Comment on the staled PRs while closed - close-pr-message: 'This PR was closed because it has been stalled for 7 days with no activity.' + # Issues: stale after 12 months, close after 2 weeks + days-before-issue-stale: 365 + days-before-issue-close: 14 + # PRs: stale after 6 months, close after 2 weeks + days-before-pr-stale: 180 + days-before-pr-close: 14 + + stale-issue-label: "Stale" + stale-pr-label: "Stale" + + # Exempt if assigned to a milestone + exempt-all-issue-milestones: true + exempt-all-pr-milestones: true + + # Messages + stale-issue-message: > + This issue has not been updated in 12 months and is now marked as stale. + It will be closed in 2 weeks unless there is new activity or it is + assigned to a milestone. + close-issue-message: > + This issue was closed because it has been stale for 2 weeks with no activity. + Feel free to reopen or create a new issue if you would like to continue + working on it. + stale-pr-message: > + This PR has not been updated in 6 months and is now marked as stale. + It will be closed in 2 weeks unless there is new activity or it is + assigned to a milestone. + close-pr-message: > + This PR was closed because it has been stale for 2 weeks with no activity. + Feel free to reopen or create a new PR if you would like to continue + working on it. + # Enable dry-run when changing this file from a PR. - debug-only: github.event_name == 'pull_request' + debug-only: ${{ github.event_name == 'pull_request' }}