Commit Graph

7978 Commits

Author SHA1 Message Date
Akihiro Suda 27838f271f Complete migration from Cirrus CI to GHA (Lima)
Fix issue 5238

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
(cherry picked from commit 9d697a9222)
(cherry-pick was not clean)
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2026-04-16 22:20:31 +09:00
lfbzhm c0b996d0d3 Merge pull request #5246 from kolyshkin/1.5-5232
[1.5] libct/int: better error reporting
2026-04-16 14:51:19 +08:00
Kir Kolyshkin c2092624ed libct/int: switch from bytes.Buffer to strings.Builder
The latter is simpler and provides just enough functionality to be used
here.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 9970cbfdb6)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-15 11:44:08 -07:00
Kir Kolyshkin c63f75727c libct/int: remove buffers.Stdin
It is never used.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 568a309225)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-15 11:44:08 -07:00
Kir Kolyshkin 87edc29643 libct/int: use readlink -v
By default, readlink is silent about any errors. Make it verbose so we
can better interpret any test failures.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 54be90bf68)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-15 11:44:08 -07:00
Kir Kolyshkin f3e4f8ece9 libct/int: show stderr if command failed
When running a process inside a container, make sure its stderr is not
nil (except for some trivial cases like cat). Modify waitProcess to show
failed command's stderr, if possible.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit bf4fcc3002)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-15 11:44:08 -07:00
Kir Kolyshkin c9fd1a38f0 libct/int: waitProcess: rm dead code
Since Wait returns an ExitError if process' exit status is not 0,
checking process status is redundant and this code is never reached.

Remove it.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit dd9fda7d60)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-15 11:44:08 -07:00
Rodrigo Campos Catelin f4254caa59 Merge pull request #5230 from kolyshkin/1.5-5226
[1.5] tests/rootless.sh: fix skipping idmap tests for systemd
2026-04-13 20:16:30 +02:00
Kir Kolyshkin 44838af3ee tests/rootless.sh: fix skipping idmap tests for systemd
When RUNC_USE_SYSTEMD is set, tests/rootless.sh is using

	ssh -tt rootless@localhost

to run tests as rootless user. In this case, local environment is not
passed to the user's ssh session (unless explicitly specified), and so
the tests do not get ROOTLESS_FEATURES.

As a result, idmap-related tests are skipped when running as rootless
using systemd cgroup driver:

	integration test (systemd driver)
	...
	[02] run rootless tests ... (idmap)
	...
	ok 286 runc run detached ({u,g}id != 0) # skip test requires rootless_idmap
	...

Fix this by creating a list of environment variables needed by the
tests, and adding those to ssh command line (in case of ssh) or
exporting (in case of sudo) so both cases work similarly.

Also, modify disable_idmap to unset variables set in enable_idmap so
they are not exported at all if idmap is not in features.

Fixes: bf15cc99 ("cgroup v2: support rootless systemd")
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 3e0829d195)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-13 10:56:18 -07:00
Kir Kolyshkin 96ffda7b87 tests: rename AUX_{DIR,UID} to ROOTLESS_AUX_*
Also, fix the typo (AUX_DIX) in cleanup.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit ac2a53be8e)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-13 10:56:18 -07:00
Rodrigo Campos Catelin 0500f93a25 Merge pull request #5236 from kolyshkin/1.5-5222
[1.5] tests/int/checkpoint: drop unneeded tests
2026-04-13 11:15:51 +02:00
Kir Kolyshkin 68388249f1 tests/int/checkpoint: drop unneeded tests
Those tests were added by commit 8d180e96 ("Add support for Linux
Network Devices"), apparently by copy-pasting the test cases which
call simple_cr (all four of them).

While different simple_cr tests make sense as they cover different
code paths in runc and/or check for various regression, the same
variations with netdevice do not make sense, as having a net device
is orthogonal to e.g. bind mount, --debug, or cgroupns.

Remove those.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 2cd4782b70)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-10 11:19:42 -07:00
Aleksa Sarai 68f0c46b2c Merge pull request #5231 from kolyshkin/1.5-5227
[1.5] libct: move cmsg helpers to new internal/cmsg package
2026-04-09 10:53:42 +10:00
Aleksa Sarai d5cead38fd libct: move cmsg helpers to new internal/cmsg package
These helpers all make more sense as a self-contained package and moving
them has the added benefit of removing an unneeded libpathrs dependency
(from libcontainer/utils's import of pathrs-lite) from several test
binaries.

Signed-off-by: Aleksa Sarai <aleksa@amutable.com>
(cherry picked from commit ca509e76ff)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-08 11:09:19 -07:00
lfbzhm 8583683931 Merge pull request #5225 from thaJeztah/1.5_backport_gofix
[1.5 backport] libcontainer/devices: add '//go:fix inline' directives
2026-04-07 23:18:19 +08:00
Sebastiaan van Stijn 83e60ddaf0 libcontainer/devices: add '//go:fix inline' directives
This allows users to automaticaly migrate to the new location
using `go fix`. It has some limitations, but can help smoothen
the transition; for example, taking this file;

```
package main

import (
	"github.com/opencontainers/runc/libcontainer/devices"
)

func main() {
	_, _ = devices.DeviceFromPath("a", "b")
	_, _ = devices.HostDevices()
	_, _ = devices.GetDevices("a")
}
```

Running `go fix -mod=readonly ./...` will migrate the code;

```
package main

import (
	devices0 "github.com/moby/sys/devices"
)

func main() {
	_, _ = devices0.DeviceFromPath("a", "b")
	_, _ = devices0.HostDevices()
	_, _ = devices0.GetDevices("a")
}
```

updates b345c78dca

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit ba83c7c7d7)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-04-06 20:41:47 +02:00
Kir Kolyshkin fcec5762e2 Merge pull request #5219 from kolyshkin/150rc2
Release 1.5.0-rc.2
2026-04-02 21:54:29 -07:00
Kir Kolyshkin 3bd7cbb531 VERSION: back to development
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-02 19:59:33 -07:00
Kir Kolyshkin c3e4075c34 VERSION: release v1.5.0-rc.2
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
v1.5.0-rc.2
2026-04-02 19:59:04 -07:00
Kir Kolyshkin e2e3deffc2 [1.5] CHANGELOG: forward-port 1.4.2 changes
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-02 19:56:23 -07:00
Aleksa Sarai 8bc2658d78 Merge pull request #5220 from kolyshkin/1.5-5142
[1.5] libct/devices: deprecate in favour of moby/sys/devices
2026-04-03 13:54:16 +11:00
Aleksa Sarai ffde8d4ed3 libct/devices: deprecate in favour of moby/sys/devices
The libcontainer/devices package has been moved to moby/sys/devices, so
we can just point users to that and keep some compatibility shims around
until runc 1.6. We don't use it at all so there are no other changes
needed.

Signed-off-by: Aleksa Sarai <aleksa@amutable.com>
(cherry picked from commit b345c78dca)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-02 18:13:02 -07:00
Rodrigo Campos Catelin 8ab3db99c6 Merge pull request #5214 from lifubang/backport-5210
[1.5] Fix SIGCHLD race in signal handler setup
2026-04-02 12:21:28 +02:00
lifubang 38f7404ba7 Fix SIGCHLD race in signal handler setup
When signal installation was moved to a goroutine for performance,
containers that exited quickly could complete before SIGCHLD was
registered, causing runc to hang waiting for the signal.

This fix ensures SIGCHLD is registered immediately in the main thread
before other signals are handled in the goroutine, maintaining performance
while guaranteeing no missed SIGCHLD notifications for fast-exiting
containers.

Reported-by: Ayato Tokubi <atokubi@redhat.com>
Signed-off-by: lifubang <lifubang@acmcoder.com>
(cherry picked from commit 404181e4cc)
Signed-off-by: lifubang <lifubang@acmcoder.com>
2026-04-02 09:39:04 +08:00
lfbzhm ef42f35b3e Merge pull request #5211 from kolyshkin/1.5-5205
[1.5] Switch to Go 1.25+
2026-04-02 09:05:37 +08:00
Aleksa Sarai a7dc07d5af go fix: use (*sync.WaitGroup).Go
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
(cherry picked from commit 47fba7e4b1)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-01 11:06:50 -07:00
Aleksa Sarai b66fa4c218 go.mod: bump minimum to Go 1.25
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
(cherry picked from commit 99d054b93f)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-01 11:06:50 -07:00
Kir Kolyshkin 62a05b94cd tests/int: allow cpu quota cgroup v1 files fds
Since switching to Go 1.25 in go.mod, the "detect fd leaks" test fails
like this:

> not ok 57 runc create[detect fd leak as comprehensively as possible]
> # (in test file tests/integration/create.bats, line 76)
> #   `[ "$violation_found" -eq 0 ]' failed
> ...
> # Violation: FD 9 -> '/system.slice/runc-test_busybox.scope/cpu.cfs_quota_us'
> # Violation: FD 10 -> '/system.slice/runc-test_busybox.scope/cpu.cfs_period_us'
> ...

This happens because Go 1.25 adds a feature to dynamically set GOMAXPROC
based on current CPU quota values. This feature can be disabled by setting

	GODEBUG=containermaxprocs=0,updatemaxprocs=0

but it is harmless to keep it (except for the above test failure).

Add an exception to the test case.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit f9a9a36fa8)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-04-01 11:06:50 -07:00
Aleksa Sarai 47fc012f96 merge #5204 into opencontainers/runc:release-1.5
Kir Kolyshkin (3):
  Pre-open container root directory
  libct: minor refactor in mountToRootfs
  libct: mountCgroupV1: address TODO

Li Fubang (1):
  libct: use preopened rootfs more

LGTMs: lifubang cyphar
2026-03-31 20:47:37 +11:00
lfbzhm 400e0abdb9 libct: use preopened rootfs more
This uses preopened rootfs in Chdir and pivotRoot.

While at it, add O_PATH when opening oldroot in pivotRoot.

Co-authored-by: Kir Kolyshkin <kolyshkin@gmail.com>
Signed-off-by: lfbzhm <lifubang@acmcoder.com>
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 5b094ed1ac)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-03-30 11:12:51 -07:00
Kir Kolyshkin 64de2a7bc6 Pre-open container root directory
A lot of filesystem-related stuff happens inside the container root
directory, and we have used its name before. It makes sense to pre-open
it and use a *os.File handle instead.

Function names in internal/pathrs are kept as is for simplicity (and it
is an internal package), but they now accept root as *os.File.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 28cb321887)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-03-30 11:12:51 -07:00
Kir Kolyshkin cfda2530bc libct: minor refactor in mountToRootfs
No change in functionality, just a preparation for the next patch.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 78b80677f6)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-03-30 11:12:51 -07:00
Kir Kolyshkin c00c9bc31a libct: mountCgroupV1: address TODO
Indeed, it does not make sense to prepend c.root once we started using
MkdirAllInRoot in commit 63c29081.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 60352524d3)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-03-30 11:12:51 -07:00
Aleksa Sarai ca6fa25527 Merge pull request #5202 from lifubang/backport-5177-1.5
[1.5] libct: close the mount source fd ASAP!
2026-03-29 19:55:50 +11:00
lifubang 1dda9cdd2d test: check mount source fds are cleaned up with idmapped mounts
Signed-off-by: lifubang <lifubang@acmcoder.com>
(cherry picked from commit 7fdab1cb69)
Signed-off-by: lifubang <lifubang@acmcoder.com>
2026-03-28 15:15:09 +00:00
lifubang 91fb1d9e21 libct: close mount source fd as soon as possible
This commit factors out setupAndMountToRootfs without changing any
logic. Use "Hide whitespace changes" during review to focus on the
actual changes.

The refactor ensures the mount source file descriptor is closed via
defer in each loop iteration, reducing the total number of open FDs
in runc. This helps avoid hitting the file descriptor limit under
high concurrency or when handling many mounts.

Signed-off-by: lifubang <lifubang@acmcoder.com>
(cherry picked from commit c77e71a3e7)
Signed-off-by: lifubang <lifubang@acmcoder.com>
2026-03-28 15:14:57 +00:00
lifubang 0f0578e878 libct: add a nil check for mountError
Signed-off-by: lifubang <lifubang@acmcoder.com>
(cherry picked from commit 0d0fd95731)
Signed-off-by: lifubang <lifubang@acmcoder.com>
2026-03-28 15:14:37 +00:00
lfbzhm f642515632 Merge pull request #5199 from cyphar/1.5-5195-readme-libpathrs
[1.5] README: add libpathrs installation notes
2026-03-28 14:56:18 +08:00
Aleksa Sarai fe80f38a31 README: add libpathrs installation notes
libpathrs now has its own installation instructions[1] but it is quite
helpful to provide some high-level instructions as well as notes about
what minimum versions we expect.

[1]: https://github.com/cyphar/libpathrs/blob/main/INSTALL.md

Suggested-by: Li Fubang <lifubang@acmcoder.com>
Signed-off-by: Aleksa Sarai <aleksa@amutable.com>
(cherry picked from commit 81d59df8d5)
Signed-off-by: Aleksa Sarai <aleksa@amutable.com>
2026-03-28 17:32:05 +11:00
lfbzhm 0826ad7ab6 Merge pull request #5198 from kolyshkin/1.5-5171
[1.5] Makefile: add RUNC_BUILDTAGS, deprecate EXTRA_BUILDTAGS
2026-03-28 09:59:19 +08:00
Kir Kolyshkin 8676012e2e Makefile: add RUNC_BUILDTAGS, deprecate EXTRA_BUILDTAGS
A bit of history. EXTRA_BUILDTAGS was introduced in commit dac417174,
as a quick way to add some extra Go build tags to the runc build.

Later, commit 767bc008 changed Makefile to not get EXTRA_TAGS from the
shell environment, as the name is quite generic and some unrelated
environment variable with that name can affect runc build. While such
change does make sense, it makes it more complicated to pass build tags
in CI and otherwise (see e.g. commit 0e1fe368a).

Moreover, runc build uses some Go build tags by default (via Makefile),
and while it is easy to add more build tags (via EXTRA_BUILDTAGS), in
order to remove some existing tags one has to redefine BUILDTAGS from
scratch, which is not very convenient (again, see commit 0e1fe368a which
gets the current value of BUILDTAGS from the Makefile in order to remove
a single tag).

To handle all of the above, let's do this:
 - implement RUNC_BUILDTAGS, fixing the issue of not-so-unique name;
 - allow to get RUNC_BUILDTAGS from shell environment;
 - implement a feature to remove a build tag from default set by
   prefixing it with "-" (as in RUNC_BUILDTAGS="-seccomp");
 - document all this in README;
 - make CI use the new feature;
 - keep EXTRA_BUILDTAGS for backward compatibility, add a make warning
   and a TODO to remove it for runc 1.6.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit d8c62c7d0b)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-03-25 21:58:12 -07:00
lfbzhm 84c4850317 Merge pull request #5183 from kolyshkin/1.5-5172
[1.5] Support specs.LinuxSeccompFlagWaitKillableRecv
2026-03-25 12:04:10 +08:00
Kir Kolyshkin 7dd372d40e Support specs.LinuxSeccompFlagWaitKillableRecv
This adds support for WaitKillableRecv seccomp flag
(also known as SCMP_FLTATR_CTL_WAITKILL in libseccomp and
as SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV in the kernel).

This requires:
 - libseccomp >= 2.6.0
 - libseccomp-golang >= 0.11.0
 - linux kernel >= 5.19

Note that this flag does not make sense without NEW_LISTENER, and
the kernel returns EINVAL when SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV
is set but SECCOMP_FILTER_FLAG_NEW_LISTENER is not set.

For runc this means that .linux.seccomp.listenerPath should also be set,
and some of the seccomp rules should have SCMP_ACT_NOTIFY action. This
is why the flag is tested separately in seccomp-notify.bats.

At the moment the only adequate CI environment for this functionality is
Fedora 43. On all other platforms (including CentOS 10 and Ubuntu 24.04)
it is skipped similar to this:

> ok 251 runc run [seccomp] (SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV) # skip requires libseccomp >= 2.6.0 and API level >= 7 (current version: 2.5.6, API level: 6)

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit 0079bee17f)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-03-25 11:40:18 +08:00
lfbzhm 284d983c1e Merge pull request #5196 from cyphar/1.5-5194-fix-libpathrs-build
[1.5] build: use POSIX regex in libpathrs build
2026-03-25 11:39:05 +08:00
Akhil Mohan aa17fa3876 [1.5] use POSIX regex in libpathrs build
word boundary anchor \> is present only in GNU awk implementation. This
will not work if we are building libpathrs inside a container like
debian/ubuntu which uses mawk. Therefore switch to a POSIX compatible
regex that can be used with all implementations of awk to find the
system libc path

Signed-off-by: Akhil Mohan <akhilerm@gmail.com>
Signed-off-by: Aleksa Sarai <aleksa@amutable.com>
(cherry picked from commit 28d5ffbab0)
Signed-off-by: Aleksa Sarai <aleksa@amutable.com>
2026-03-25 02:59:18 +11:00
Aleksa Sarai e1c1378fc9 Merge pull request #5179 from kolyshkin/1.5-5175
[1.5] CHANGELOG: move "better errors from runc init" to 1.4.0
2026-03-17 10:25:23 +09:00
Kir Kolyshkin d5db4a59a5 CHANGELOG: move "better errors from runc init" to 1.4.0
Found out that these changes were backported to release-1.4 (PR 5040)
and made its way into runc v1.4.0, but were missing from its CHANGELOG.

Move the item to v1.4.0 changelog, and add a backport PR reference.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
(cherry picked from commit e232a541bd)
Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2026-03-16 10:45:23 -07:00
Aleksa Sarai 5c48e21781 merge #5154 into opencontainers/runc:main
Aleksa Sarai (4):
  VERSION: back to development
  VERSION: release v1.5.0-rc.1
  CHANGELOG: forward-port v1.4.1 entry
  CHANGELOG: add original PR references to backports

LGTMs: rata lifubang
2026-03-13 21:28:25 +09:00
Aleksa Sarai e5b355048c VERSION: back to development
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
2026-03-13 18:17:43 +09:00
Aleksa Sarai 5d2588d379 VERSION: release v1.5.0-rc.1
Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
v1.5.0-rc.1
2026-03-13 18:17:43 +09:00