This is the second release candidate of the upcoming runc 1.6.0 release.
It includes a fix for a high-severity vulnerability (CVE-2026-119101)
affecting users who checkpoint and restore containers, a couple of new
features, and various fixes and improvements.
This version includes all of the patches backported to runc v1.5.3.
Users are strongly encouraged to test our release candidates so we can
fix issues before the general release.
Security
This release includes a fix for the following high-severity security issue:
-
CVE-2026-119101 allowed a malicious image, using crafted symlinks in
its rootfs, to confuse the way runc names external mounts for CRIU, and so
makerunc restorebind-mount an arbitrary host directory into the restored
container, read-write. Only users who both checkpoint and later restore
containers running untrusted images are affected (checkpoint/restore
requires root, so rootless runc is not affected). The same issue was found
in crun (CVE-2026-115520); CRIU itself is fixed in CVE-2026-119614.In addition,
runc restoreno longer makes read-only bind mounts writable,
even temporarily, while preparing the container mounts.
Breaking
- A mount destination prefixed with the container rootfs path is no longer
treated specially (previously, the prefix was stripped). As the runtime spec
says, the destination is a path inside the container, and it is now used
as such. (#5556)
Added
- New
--cgroup-managerglobal option, to select the cgroup manager
(cgroupfsorsystemd). This is compatible with crun. (#5570) - docs/spec-conformance.md now documents the known deviations from the
runtime spec. (#1846, #5528)
Deprecated
libcontainer.Stats.Interfacesandtypes.Stats.NetworkInterfaces(shown
asnetwork_interfacesinrunc events --statsoutput) are deprecated, as
they are always empty since the removal of veth network strategy in runc
1.0.0-rc6. (#5523)- The
--systemd-cgroupglobal option is deprecated in favor of
--cgroup-manager=systemd. It still works, and there are no plans to
remove it. (#5570)
Changed
- A container configuration which uses
--no-pivotor sets
linux.rootfsPropagation, but does not have its own mount namespace, is now
refused. Previously,--no-pivotresulted in host's/procand/sysbeing
unmounted, androotfsPropagationchanged the propagation of host mounts.
(#5535) - Using
/as container rootfs is now refused. Previously, it failed with a
mount namespace, and without one, container mounts (such as/proc) were
mounted on top of the host ones. (#5535) - Mount errors now quote the source, destination and mount data, so that
control characters in them can not hide or garble the error message.
(#5320, #5560) - The log file (
--log) is no longer opened withO_SYNC, which made every
log write wait for the data to reach the disk. (#5547) - runc no longer prints CRIU requests and responses in debug logs (CRIU logs
what it does in its own log files anyway). Together with not linking in the
DNS resolver and godbus/dbus TCP transports (the newgodbus_no_tcpbuild
tag), this makes the runc binary about 200 KB smaller. (#5515, #5516, #5546) - The bash completion file no longer has a shebang line, as it is sourced,
not executed. (#5526) - Updated dependencies: checkpoint-restore/go-criu to v8.5.0,
moby/sys/mountinfo to v0.7.3, moby/sys/user to v0.5.0, golang.org/x/net to
v0.62.0, and golang.org/x/sys to v0.49.0. (#5553, #5555, #5562, #5578,
#5603, #5604, #5607)
Fixed
- runc now errors out when seccomp
defaultErrnoRetorerrnoRetis set for
an action which does not support it (i.e. anything other than
SCMP_ACT_ERRNOandSCMP_ACT_TRACE), as required by the runtime spec.
Previously, such values were silently ignored. (#5550, #5564) - runc no longer hangs if
runc initis partially killed (for example, by a
seccompSCMP_ACT_KILLrule hitting its main thread). (#5087, #5431) runc runandrunc execrun as a background job of a shell no longer
occasionally busy-loop when reading from the terminal; instead, they are
stopped bySIGTTIN, as expected, and can be resumed withfg.
(#1430, #5525)- A network device name (
linux.netDevices) of 16 bytes is now rejected
during validation. Previously, runc failed later, after the host interface
was already set down, leaving it down. (#5606) - Some file descriptors opened by runc were not marked close-on-exec, and so
could leak into the container processes (notably, an inotify fd used for
OOM notifications leaked into everyrunc execprocess). (#5480)
Static Linking Notices
The runc binaries 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":
Similarly, the runc binaries distributed with this release are also
statically linked with the following MPLv2 licensed libraries,
with runc acting as a "Larger Work":
The versions of these libraries were not modified from their upstream versions,
but in order to comply with their corresponding licenses, we have attached the
complete source code for those libraries which (when combined with the attached
runc source code) may be used to exercise your rights under their respective
licenses.
However, we strongly suggest that you make use of your distribution's packages
or download them from the authoritative upstream sources, especially since
these libraries are related to the security of your containers.
Thanks to the following contributors who made this release possible:
- Akihiro Suda akihiro.suda.cz@hco.ntt.co.jp
- Benjamin Peterson benjamin@engflow.com
- Eduard Zateev hackerowskiy@gmail.com
- Kaj Kowalski info@kajkowalski.nl
- Kir Kolyshkin kolyshkin@gmail.com
- Lucas Sotomayor sotomayorlucas@pm.me
- Raphael Fakhri mail@raphaelfakhri.com
- Sebastiaan van Stijn github@gone.nl
Signed-off-by: Kir Kolyshkin kolyshkin@gmail.com