Skip to content

Release 1.5.2 - #5466

Draft
kolyshkin wants to merge 28 commits into
opencontainers:release-1.5from
kolyshkin:rel-1.5.2
Draft

kolyshkin wants to merge 28 commits into
opencontainers:release-1.5from
kolyshkin:rel-1.5.2

Conversation

@kolyshkin

@kolyshkin kolyshkin commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Release runc v1.5.2.

This is a draft: it includes all the commits from the following
not-yet-merged backport PRs, which need to be merged first:

Once those are merged, this PR will be rebased so that it only has the two
commits on top: "VERSION: release v1.5.2" and "VERSION: back to development".

If you want to review now, only review these last two commits.

Also TODO before merging:

  • fill in the release tagline in CHANGELOG.md;
  • update the release date (currently set to 2026-09-13).

The release commit also adds CHANGELOG entries for the already merged
PRs which were missing them (#5442 + #5449, #5381), and mentions #5451
and GO-2026-6238.

Copy-paste from the relevant CHANGELOG portion below:

[1.5.2] - 2026-09-13

TODO: release tagline.

Fixed

  • runc exec -p with a process.json lacking env now sets HOME again
    (a regression in runc 1.3.0). (#5265, #5266, #5459)
  • Worked around a Linux kernel bug (present since kernel v6.17, fixed in v7.2)
    which caused the kernel to write past the end of the structure
    provided by userspace (runc). This resulted in memory corruption inside runc
    (manifesting as random crashes) when configuring device rules on cgroup v2
    systems. (#5403, #5428)
  • runc exec --cgroup (and the equivalent libcontainer Process.SubCgroupPaths
    API) no longer accepts a sub-cgroup path that escapes the container's cgroup
    into a sibling cgroup sharing the same name prefix. Note that using
    --cgroup requires the same privileges as running runc exec itself, so
    this is a correctness rather than a security fix. (#5403, #5457)
  • Fixed a missing O_CLOEXEC when opening the cgroup v2 directory to set up
    device rules. (#5403, #5428)
  • When rootfsPropagation is set to rslave, the rootfs parent mount is no
    longer made private before pivoting into the rootfs, so unmount/remount
    events on host mountpoints under the rootfs are now propagated to the
    running container. (#5192, #5200, #5458)
  • runc no longer misdetects a non-initial user namespace as the initial one
    when that namespace has a full identity ID mapping (0 0 4294967295), as
    used by systemd >= 260 units with PrivateUsers=full. Previously this made
    runc skip its user namespace code paths, so starting a container in such a
    unit failed with bpf_prog_query(BPF_CGROUP_DEVICE) failed: operation not permitted. (#5396, #5411, #5451, moby/sys#239)
  • Fixed a runc init panic (SIGABRT) on the error path, caused by SELinux
    labels being reset after the cached libpathrs procfs handle was already
    closed. This is fixed both by not resetting the labels on the init error
    path, and by updating to libpathrs v0.2.6, which now handles a closed
    procfs handle gracefully. (#5438, #5439, #5442, #5448, #5449, #5467, #5469)
  • Fixed various issues when the libseccomp version runc is run with differs
    from the one it was compiled against (e.g. built with libseccomp >= 2.6.0 and
    run with an older one), by updating to libseccomp-golang v0.12.0. This also
    supersedes the SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV workaround added in
    runc 1.5.1. (#5436, #5461)

Changed

  • Switched to opencontainers/cgroups v0.1.0, which no longer uses the
    high-level cilium/ebpf API to manage cgroup v2 device rules. As a result,
    the runc binary shrunk by about 1 MiB (7.5%) on amd64. This also means runc
    no longer calls the cilium/ebpf code affected by GO-2026-6238. (#5403, #5428)
  • Updated golang.org/x/net to v0.55.0. (#5379, #5381)
  • Updated builds to libseccomp v2.6.1. (#5376, #5460)

kolyshkin and others added 24 commits September 13, 2026 13:54
This tests checks that "runc exec --env VAR=VAR ..." actually appends
VAR=VAL to the exec's environment.

Add additional checks that:
 - process.env from config.json is also inherited;
 - HOME is set.

Those checks do not reveal any new issues.

(cherry picked from commit 6210ceb)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
All existing tests check runc run, and there is no single runc exec
environment test except for one in exec.bats.

Add it (no new issues found).

(cherry picked from commit d530786)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
The check that a sub-cgroup path (as set by runc exec --cgroup, or
libcontainer's Process.SubCgroupPaths) does not escape the container's
cgroup was too lax: a plain prefix check also accepts a sibling cgroup
whose name starts with the container cgroup name (say, "../foo-suffix"
for a container cgroup named "foo").

For addIntoCgroupV1 (used for per-controller sub-cgroup paths, which
AddPid does not support) the resulting path is passed to WriteCgroupProc
as is, so the pid did end up in the sibling cgroup. For prepareCgroupFD
the subsequent cgroups.OpenFile call cleans the path, so nothing escaped
in practice, but the check was wrong nevertheless.

Use the same check as opencontainers/cgroups v0.0.9 does in AddPid, and
add test cases for both code paths.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
(cherry picked from commit 7820c58)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Bumps [github.com/seccomp/libseccomp-golang](https://github.com/seccomp/libseccomp-golang) from 0.11.1 to 0.12.0.
- [Release notes](https://github.com/seccomp/libseccomp-golang/releases)
- [Changelog](https://github.com/seccomp/libseccomp-golang/blob/main/CHANGELOG)
- [Commits](seccomp/libseccomp-golang@v0.11.1...v0.12.0)

---
updated-dependencies:
- dependency-name: github.com/seccomp/libseccomp-golang
  dependency-version: 0.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit 0e5aa12)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Commit 4d84a34 (PR opencontainers#5347) added a workaround to ignore EINVAL from
filter.GetWaitKill(), which happens when the run-time libseccomp is
older than the compile-time one and thus does not support the wait-kill
flag.

libseccomp-golang v0.12.0 handles compile-time vs. run-time version
mismatches itself, so the workaround is no longer needed.

(cherry picked from commit 177f385)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This was released July 1 2026, see
https://github.com/seccomp/libseccomp/releases/tag/v2.6.1

(cherry picked from commit ea0c849)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This is mostly shellcheck complaining about missing quotes (SC2046
and SC2086). Issues found by actionlint (which runs shellcheck for
all run: statements in GHA workflows.

(cherry picked from commit a752f49)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Debugging GHA yaml is not fun -- usually when there is an issue with a
workflow file, it just doesn't run.

Let's add a separate actionlint job to catch workflow issues.

(cherry picked from commit 614303b)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Bumps [devops-actions/actionlint](https://github.com/devops-actions/actionlint) from 0.1.12 to 0.1.13.
- [Release notes](https://github.com/devops-actions/actionlint/releases)
- [Commits](devops-actions/actionlint@9fb9c19...ec02b36)

---
updated-dependencies:
- dependency-name: devops-actions/actionlint
  dependency-version: 0.1.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit cda8b69)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Use the actively maintained fork of rhysd/actionlint, which contains a
lot of fixes and knows about the newer GitHub-hosted runner images. It
ships its own action, so devops-actions/actionlint is no longer needed.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>

(cherry picked from commit 2b8c56a)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
A version tag (even a "full" one like v7.0.1) is mutable: whoever
controls the action's repository can move it to point to any other
commit. Pinning to a full commit hash is the only way to get the exact
same action code on every run.

Found by zizmor's unpinned-uses audit. Dependabot is already enabled for
the github-actions ecosystem and knows how to update hash pins together
with their version comments, so this should not add maintenance burden.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
(cherry picked from commit 16f9604)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Set persist-credentials: false for actions/checkout, as applied by
"zizmor --fix". By default checkout leaves the credentials it used in
.git/config, where any later step (or anything that archives the
workspace) can pick them up. Nothing here pushes back to the repository,
so they are not needed.

The remaining findings are all cache-poisoning, and are ignored via
.github/zizmor.yml, which explains why they do not apply to us.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
(cherry picked from commit b3ae9b4)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Cancel CI runs that are already superseded, rather than letting them run
to completion and waste runner time. This is most of what our CI queue
is spent on when a pull request is force-pushed a few times in a row.

For the three workflows that run on pull requests, the concurrency group
is keyed by PR number, so only runs of the same pull request cancel each
other. For anything else -- in particular pushes to main, to release-*,
and to a v* tag, the latter also producing the release binaries -- there
is no PR number, so the group falls back to the unique run_id and no run
is ever cancelled. Keying by github.head_ref instead would be wrong, as
two pull requests from different forks can use the same branch name.

scheduled.yml only triggers other workflows, so a single group for the
whole workflow is enough there. It does not cancel in progress runs,
though: a workflow_dispatch arriving while a scheduled run is halfway
through its matrix would leave some of the branches untriggered.

Found by zizmor's concurrency-limits audit (--persona=pedantic).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
(cherry picked from commit 5f980ea)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 213b152)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
When rootfsPropagation is set to rslave, prepareRoot() was forcing the
rootfs parent mount to MS_PRIVATE before bind-mounting and pivoting into
the rootfs. That breaks the slave relationship needed for HostToContainer
propagation, so later unmount/remount events on host mountpoints under
the rootfs are not reflected inside the running container.

Fix this by keeping the rootfs parent mount as MS_SLAVE for slave-like
rootfs propagation settings, while leaving the final root propagation
remount in place.

Signed-off-by: sean <xujihui1985@gmail.com>
(cherry picked from commit ec170d8)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
add bat integration test for rootfs propagation test, expect to
see the mount propagation is slave, the test will create a isolate mntns
to run the test as the test will mutate the rootfs propagation

Signed-off-by: sean <xujihui1985@gmail.com>
(cherry picked from commit 38245cc)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Before commit 7dc2486, when process.env was nil, prepareEnv
returned a flag telling HOME is not set, and it was added.

Commit 7dc2486 moved the functionality of adding HOME into
prepareEnv but did not properly handle nil case. As a result,
runc exec -p with process.json having no env set resulted in
an exec with no HOME set.

Fix this, and add unit and integration tests.

Fixes: 7dc2486 ("libct: switch to numeric UID/GID/groups")
(cherry picked from commit 321073e)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
…lave propagation for rslave containers)

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
…ss.env not setting HOME)

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
…/libseccomp-golang from 0.11.1 to 0.12.0)

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
@kolyshkin kolyshkin added this to the 1.5.2 milestone Sep 14, 2026
dependabot Bot and others added 4 commits September 13, 2026 22:25
---
updated-dependencies:
- dependency-name: cyphar.com/go-pathrs
  dependency-version: 0.2.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
(cherry picked from commit 46d34c3)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
…rs from 0.2.5 to 0.2.6)

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
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.

2 participants