This is the long-awaited release of runc 1.2.0! The primary changes from rc3
are general improvements and fixes for minor regressions related to the
new /proc/self/exe cloning logic in runc 1.2, follow-on patches related
to CVE-2024-45310, as well as some other minor changes.
In order to alleviate the remaining concerns around the memory usage and
(arguably somewhat unimportant, but measurable) performance overhead of
memfds for cloning /proc/self/exe, we have added a new protection using
overlayfs that is used if you have enough privileges and the running
kernel supports it. It has effectively no performance nor memory overhead
(compared to no cloning at all). (#4448)
The original fix for CVE-2024-45310 was intentionally very
limited in scope to make it easier to review, however it also did not handle
all possible os.MkdirAll cases and thus could lead to regressions. We have
switched to the more complete implementation in the newer versions of
github.com/cyphar/filepath-securejoin. (#4393, #4400, #4421, #4430)
In certain situations (a system with lots of mounts or racing mounts) we
could accidentally end up leaking mounts from the container into the host.
This has been fixed. (#4417)
The fallback logic for O_TMPFILE clones of /proc/self/exe had a minor
bug that would cause us to miss non-noexec directories and thus fail to
start containers on some systems. (#4444)
Sometimes the cloned /proc/self/exe file descriptor could be placed in a
way that it would get clobbered by the Go runtime. We had a fix for this
already but it turns out it could still break in rare circumstances, but it
has now been fixed. (#4294, #4452)
It is not possible for runc kill to work properly in some specific
configurations (such as rootless containers with no cgroups and a shared pid
namespace). We now output a warning for such configurations. (#4398)
memfd-bind: update the documentation and make path handling with the systemd
unit more idiomatic. (#4428)
We now use v0.16 of Cilium's eBPF library, including fixes that quite a few
downstreams asked for. (#4397, #4396)
Some internal runc init synchronisation that was no longer necessary (due
to the /proc/self/exe cloning move to Go) was removed. (#4441)
Static Linking Notices
The runc binary distributed with this release are statically linked with
the following GNU LGPL-2.1 licensed libraries, with runc acting
as a "work that uses the Library":
In order to alleviate the remaining concerns around the memory usage and
(arguably somewhat unimportant, but measurable) performance overhead of
memfds for cloning /proc/self/exe, we have added a new protection using
overlayfs that is used if you have enough privileges and the running
kernel supports it. It has effectively no performance nor memory overhead
(compared to no cloning at all). (#4448)
Fixed
The original fix for CVE-2024-45310 was intentionally very
limited in scope to make it easier to review, however it also did not handle
all possible os.MkdirAll cases and thus could lead to regressions. We have
switched to the more complete implementation in the newer versions of
github.com/cyphar/filepath-securejoin. (#4393, #4400, #4421, #4430)
In certain situations (a system with lots of mounts or racing mounts) we
could accidentally end up leaking mounts from the container into the host.
This has been fixed. (#4417)
The fallback logic for O_TMPFILE clones of /proc/self/exe had a minor
bug that would cause us to miss non-noexec directories and thus fail to
start containers on some systems. (#4444)
Sometimes the cloned /proc/self/exe file descriptor could be placed in a
way that it would get clobbered by the Go runtime. We had a fix for this
already but it turns out it could still break in rare circumstances, but it
has now been fixed. (#4294, #4452)
Changed
It is not possible for runc kill to work properly in some specific
configurations (such as rootless containers with no cgroups and a shared pid
namespace). We now output a warning for such configurations. (#4398)
memfd-bind: update the documentation and make path handling with the systemd
unit more idiomatic. (#4428)
We now use v0.16 of Cilium's eBPF library, including fixes that quite a few
downstreams asked for. (#4397, #4396)
Some internal runc init synchronisation that was no longer necessary (due
to the /proc/self/exe cloning move to Go) was removed. (#4441)
[1.2.0-rc.3] - 2024-09-02
The supreme happiness of life is the conviction that we are loved.
Security
Fix CVE-2024-45310, a low-severity attack that allowed
maliciously configured containers to create empty files and directories on
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)
- `@dependabot ignore minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)
- `@dependabot ignore ` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore ` will remove all of the ignore conditions of the specified dependency
- `@dependabot unignore ` will remove the ignore condition of the specified dependency and ignore conditions
Bumps the gomod group with 5 updates:
0.31.1
0.31.2
0.31.1
0.31.2
0.31.1
0.31.2
0.31.1
0.31.2
1.1.15
1.2.0
Updates
k8s.io/api
from 0.31.1 to 0.31.2Commits
bc73ef7
Update dependencies to v0.31.2 tagUpdates
k8s.io/apimachinery
from 0.31.1 to 0.31.2Commits
Updates
k8s.io/client-go
from 0.31.1 to 0.31.2Commits
270e5ab
Update dependencies to v0.31.2 tagUpdates
k8s.io/mount-utils
from 0.31.1 to 0.31.2Commits
Updates
github.com/opencontainers/runc
from 1.1.15 to 1.2.0Release notes
Sourced from github.com/opencontainers/runc's releases.
... (truncated)
Changelog
Sourced from github.com/opencontainers/runc's changelog.
... (truncated)
Commits
0b9fa21
VERSION: release v1.2.05190d61
Merge pull request #4452 from lifubang/fix-fd-reuse-raceca45a2c
merge #4446 into opencontainers/runc:main568231c
Revert "increase memory.max in cgroups.bats"e669926
fix an error caused by fd reuse race when starting runc initca8ca3c
Merge pull request #4448 from cyphar/cloned-binary-overlayfs08faf15
Merge pull request #4429 from kolyshkin/cap-load515f09f
dmz: use overlayfs to write-protect /proc/self/exe if possible8cfbccb
tests: integration: add helper to check if we're in a userns8bebdba
Merge pull request #4456 from kolyshkin/misc-ci-cleanupsDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show