Commit Graph

5077 Commits

Author SHA1 Message Date
Shiming Zhang adf733fa64 vendor: update go-systemd and godbus
Signed-off-by: Shiming Zhang <wzshiming@foxmail.com>
2021-04-01 20:54:13 +08:00
Kir Kolyshkin bed4d89f57 Merge pull request #2807 from kolyshkin/google-golang-protobuf
go.mod, libct: switch to google.golang.org/protobuf
2021-03-31 20:34:16 -07:00
Akihiro Suda a1270a6ae9 Merge pull request #2802 from kolyshkin/run-leaks
libct: fix some container.Run fd leaks, add fd leak test
2021-03-31 12:42:43 +09:00
Kir Kolyshkin 79a8647b81 libct/int: add TestFdLeaks
This is a very simple test that checks that container.Run do not leak
opened file descriptors.

In fact it does, so we have to add two exclusions:

1. /sys/fs/cgroup is opened once per lifetime in prepareOpenat2(),
    provided that cgroupv2 is used and openat2 is available. This
    works as intended ("it's not a bug, it's a feature").

2. ebpf program fd is leaked every time we call setDevices() for
   cgroupv2 (iow, every container.Run or container.Set leaks 1 fd).
   This needs to be fixed, thus FIXME.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-30 19:58:09 -07:00
Kir Kolyshkin b3be2b0b4f libct: close execFifo after start
Apparently, the parent never closes execFifo fd. Not a problem for runc
per se, but can be an issue for a user of libcontainer.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-30 19:58:09 -07:00
Mrunal Patel b79201f280 Merge pull request #2874 from KentaTada/add-security-configs-r93
script/check-config.sh: add SELinux and AppArmor
2021-03-29 13:45:41 -07:00
Mrunal Patel f8987a5c8c Merge pull request #2877 from kolyshkin/cpt-debug
tests/int/cpt: better debug
2021-03-29 10:31:01 -07:00
Kir Kolyshkin 62f1f0e499 tests/int/checkpoint: check all logs for errors
This is to help debug issue #2805.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-28 11:17:23 -07:00
Kir Kolyshkin 346cb35922 Revert "tests/checkpoint: show full log lazy pages cpt"
The full log is very long and it did not gave us any additional clues.

This reverts commit 053e15c001.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-28 10:54:36 -07:00
Kir Kolyshkin 2400e5e36e Merge pull request #2860 from kolyshkin/validate-c
fix/simplify scripts/validate-c, fix *.c formatting
2021-03-28 10:17:34 -07:00
Kenta Tada c9b3787b60 script/check-config.sh: add SELinux and AppArmor
SELinux and AppArmor are always enabled since runc v1.0.0-rc93

Signed-off-by: Kenta Tada <Kenta.Tada@sony.com>
2021-03-27 10:27:23 +09:00
Mrunal Patel 3505f15e35 Merge pull request #2834 from AkihiroSuda/cache-vagrant
CI: cache ~/.vagrant.d/boxes
2021-03-26 11:33:33 -07:00
Mrunal Patel 1827254afe Merge pull request #2870 from kolyshkin/seccomp-version
libct/seccomp: remove IsEnabled
2021-03-26 11:20:55 -07:00
Mrunal Patel 547951061e Merge pull request #2835 from kolyshkin/fix-init-log-race
Fix init log forwarding race
2021-03-26 11:17:03 -07:00
Akihiro Suda 5df79d5c3d Merge pull request #2820 from dqminh/io-cgroup2-fallback
fs2: fallback to setting io.weight if io.bfq.weight
2021-03-26 18:58:51 +09:00
Kir Kolyshkin 2726146b04 runc --debug: more tests
First, add runc --debug exec test cases, very similar to those in
debug.bats but for runc exec (rather than runc run). Do not include json
tests as it is already tested in debug.bats.

Second, add logrus debug to late stages of runc init, and amend the
integration tests to check for those messages. This serves two purposes:

 - demonstrate that runc init can be amended with debug logrus which is
   properly forwarded to and logged by the parent runc create/run/exec;

 - improve the chances to catch the race fixed by the previous commit.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-25 19:19:20 -07:00
Kir Kolyshkin 201d60c51d runc run/start/exec: fix init log forwarding race
Sometimes debug.bats test cases are failing like this:

> not ok 27 global --debug to --log --log-format 'json'
> # (in test file tests/integration/debug.bats, line 77)
> #   `[[ "${output}" == *"child process in init()"* ]]' failed

It happens more when writing to disk.

This issue is caused by the fact that runc spawns log forwarding goroutine
(ForwardLogs) but does not wait for it to finish, resulting in missing
debug lines from nsexec.

ForwardLogs itself, though, never finishes, because it reads from a
reading side of a pipe which writing side is not closed. This is
especially true in case of runc create, which spawns runc init and
exits; meanwhile runc init waits on exec fifo for arbitrarily long
time before doing execve.

So, to fix the failure described above, we need to:

 1. Make runc create/run/exec wait for ForwardLogs to finish;

 2. Make runc init close its log pipe file descriptor (i.e.
    the one which value is passed in _LIBCONTAINER_LOGPIPE
    environment variable).

This is exactly what this commit does:

 1. Amend ForwardLogs to return a channel, and wait for it in start().

 2. In runc init, save the log fd and close it as late as possible.

PS I have to admit I still do not understand why an explicit close of
log pipe fd is required in e.g. (*linuxSetnsInit).Init, right before
the execve which (thanks to CLOEXEC) closes the fd anyway.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-25 19:18:55 -07:00
Kir Kolyshkin c06f999b76 libct/logs/test: refactor
- add check, checkWait, and finish helpers;
 - move test cleanup to runLogForwarding;
 - introduce and use log struct.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-25 18:58:30 -07:00
Kir Kolyshkin 688ea99e1b runc init: fix double call to ConfigureLogs
I have noticed that ConfigureLogs do not return an error in case logging
was already configured -- instead it just warns about it. So I went
ahead and changed the warning to the actual error...

... only to discover I broke things badly, because in case of runc init
logging is configured twice. The fix is to not configure logging in case
we are init.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-25 18:56:15 -07:00
Kir Kolyshkin dd6c8d76bb main: cast Chmod argument to os.FileMode
This fixes a big red warning in my vim.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-25 18:56:15 -07:00
Kir Kolyshkin 69ec21a12f libct/logs.ForwardLogs: use bufio.Scanner
Error handling is slightly cleaner this way.

While at it, do minor refactoring and fix error logging
in processEntry.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-25 18:56:15 -07:00
Kir Kolyshkin 0300299a72 tests/int/debug.bats: fixups
1. Remove redundant "echo $output" from the first test case, as "runc"
   helper function already logs the output.

2. Show the contents of log.out to stderr, so it case of error we can
   see what is going on.

3. Remove the check that `log.out` file exists. This check is redundant,
   since right after it we do `cat log.out` and check its exit code.

4. Factor out common checks into check_debug.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-25 18:56:15 -07:00
Kir Kolyshkin d38d1f9f79 libcontainer/logs: use int for Config.LogPipeFd
It does not make sense to have a string for a numeric type.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-25 18:56:15 -07:00
Kir Kolyshkin ac93746c4d libct/seccomp: rm IsEnabled
seccomp.IsEnabled is not well defined (the presence of Seccomp: field
in /proc/self/status does not tell us whether CONFIG_SECCOMP_FILTER
is enabled in the kernel; parsing all keys in /proc/self/status is a
moderate waste of resources, etc).

I traced its addition back to [1] and even in there it is not clear
what for it was added. There were never an internal user (except
for the recently added one, removed by the previous commit), and
can't find any external users (but found two copy-pastes of this
code, suffering from the same problems, see [2] and [3]).

Since it is broken and has no users, remove it.

[1] https://github.com/opencontainers/runc/pull/471
[2] https://github.com/containerd/containerd/blob/master/pkg/seccomp/seccomp_linux.go
[3] https://github.com/containers/common/blob/master/pkg/seccomp/supported.go

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-23 16:59:46 -07:00
Kir Kolyshkin 9b2f1e6fb6 runc version: don't use seccomp.IsEnabled
As pointed out to in [1], seccomp.IsEnabled does some runtime checks,
while here (when printing libseccomp version) we should merely print
the version number of libseccomp, if compiled in.

Change the code to check if the version is non-zero (as seccomp.Version
returns 0, 0, 0 in case seccomp is not compiled in.

[1] https://github.com/opencontainers/runc/pull/2866

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-23 16:10:08 -07:00
Kir Kolyshkin ec7ca2a9d8 Merge pull request #2851 from thaJeztah/fix_build_tags
Fix build-tags in libcontainer/devices
2021-03-22 20:34:23 -07:00
Kir Kolyshkin 010d0a3f8b Merge pull request #2867 from KentaTada/fix-seccomp-kernel-config
script/check-config.sh: add CONFIG_SECCOMP_FILTER
2021-03-22 15:53:46 -07:00
Akihiro Suda 3cc9670dd4 Merge pull request #2863 from thaJeztah/runc_refactor_caps
capabilities.Caps: use a map for capability-types
2021-03-22 14:33:35 +09:00
Akihiro Suda e112c95b30 Merge pull request #2852 from thaJeztah/apparmor_once 2021-03-22 03:07:26 +09:00
Kenta Tada d76309f911 script/check-config.sh: add CONFIG_SECCOMP_FILTER
CONFIG_SECCOMP_FILTER is actually used in runc.

Signed-off-by: Kenta Tada <Kenta.Tada@sony.com>
2021-03-21 13:55:12 +09:00
Sebastiaan van Stijn 997e89420d capabilities.Caps: use a map for capability-types
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-03-19 11:21:08 +01:00
Kir Kolyshkin 41f466d89d nsexec.c: fix formatting for netlink defines
They were not aligned, and the last two had spaces not tabs.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-18 16:56:14 -07:00
Kir Kolyshkin 522bd64187 Fix checking C code formatting
Apparently, scripts/validate-c is not working in CI (or maybe
maintainers ignored the failures from it) -- current C code
gets some changes if we run indent on it.

This commit fixes this, simplifying things along the way.

 In particular:

1. Remove "validate" make target, add "cfmt" target that just runs
   indent on all *.c files in the repository (NOTE that *.h files
   are not included, as before).

   This may help a contributor to fix their code -- they just need
   to run "make cfmt" now instead of running "make validate" and
   copy-pasting the indent command and options from the hint.

2. Split GHA validate/misc into validate/release and validate/cfmt.
   The latter checks that the sources are not changed after "make cfmt".

3. Adds a few more options to indent. This was mostly motivated by
   trying to save the existing formatting, minimizing the amount of
   changes indent produces.

   The new options are:

   * -il0: sets the offset for goto labels to 0 (currently all labels
     but one are not indented -- let's keep it that way);

   * -ppi2: sets the indentation for nested preprocessor directives
     to 2 spaces (same as it is done in "SYS_memfd_create" defines);

   * -cp1: sets the indentation between #else / #endif and the
     following comment to 1 space.

4. Reformat the code using the new indent options.

5. Remove the now-unused script/{.validate,validate-c}.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-18 16:56:09 -07:00
Kir Kolyshkin 1948b4cee8 cloned_binary.c: rm redundant comments
Remove comments with architectures when defining SYS_memfd_create,
as they are redundant, and indent has a funny way of indenting them.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-18 16:53:44 -07:00
Kir Kolyshkin b67deb567a nsexec.c: rm a block
This block apparently does nothing except for creating
a need for additional indentation. Remove it.

While at it, break a long line in this code.

No functional change.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-17 13:08:20 -07:00
Sebastiaan van Stijn 513d89eec5 capabilities: use BOUNDING/AMBIENT instead of their alias
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-03-17 17:10:15 +01:00
Akihiro Suda 0ae1475066 Merge pull request #2798 from adrianreber/2021-02-08-nested-bind.mounts
Correctly restore containers with nested bind mounts
2021-03-17 12:47:21 +09:00
Akihiro Suda 29eafff43e Merge pull request #2857 from thaJeztah/bump_runtime_spec 2021-03-17 07:58:14 +09:00
Sebastiaan van Stijn dd2caace16 go.mod: runtime-spec v1.0.3-0.20210316141917-a8c4a9ee0f6b
full diff: https://github.com/opencontainers/runtime-spec/compare/e6143ca7d51d...a8c4a9ee0f6b

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-03-16 16:57:38 +01:00
Sebastiaan van Stijn a608b7e725 libcontainer/apparmor: use sync.Once for AppArmor detection
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-03-16 15:12:55 +01:00
Sebastiaan van Stijn d6e892489f Fix build-tags in libcontainer/devices
Allows importing this package on Windows (for the types)

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2021-03-14 19:11:19 +01:00
Kir Kolyshkin 249bca0a13 Merge pull request #2841 from AdamKorcz/fuzz1
tests: Move fuzzers upstream
2021-03-10 12:00:43 -08:00
Akihiro Suda 097062ae71 Merge pull request #2842 from kolyshkin/cpt-lazy-full-log
tests/checkpoint: show full log lazy pages cpt
2021-03-10 13:30:33 +09:00
AdamKorcz 2ae5665351 Move fuzzers upstream
Signed-off-by: AdamKorcz <adam@adalogics.com>
2021-03-09 10:07:11 +00:00
Kir Kolyshkin 053e15c001 tests/checkpoint: show full log lazy pages cpt
Sometimes the test fails without any clear diagnostics:

> not ok 16 checkpoint --lazy-pages and restore
> (in test file tests/integration/checkpoint.bats, line 191)
>  `[ "$out" = "0000000 000000 0000001" ]' failed
> ...
> criu failed: type NOTIFY errno 3\nlog file: work-dir/dump.log

We look for and print errors via grep, but in the above case
there are nothing that is denoted error in the log.

So, let's show the damn log in its entirely (note it is only shown
if test fails).

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
2021-03-08 15:04:40 -08:00
Kir Kolyshkin 59ad417c14 Merge pull request #2833 from kolyshkin/curl-retry
curl: add --retry 5
2021-03-05 20:00:53 -08:00
Daniel Dao 8c7ece1e6d fs2: fallback to setting io.weight if io.bfq.weight
if bfq is not loaded, then io.bfq.weight is not available. io.weight
should always be available and is the next best equivalent thing.

Signed-off-by: Daniel Dao <dqminh89@gmail.com>
2021-03-05 13:55:36 +00:00
Akihiro Suda 74299a1cfb CI: cache ~/.vagrant.d/boxes
For deflaking CI failures during `vagrant up`

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2021-03-05 13:21:28 +09:00
Mrunal Patel 497cd0c96e Merge pull request #2829 from KentaTada/refactor-mode-of-factory
libcontainer/factory*: adjust the file mode
2021-03-04 15:42:13 -08:00
Mrunal Patel 50ac158d05 Merge pull request #2809 from kolyshkin/rm-old-hacks
Makefile cleanups
2021-03-04 15:41:19 -08:00