Skip to content

Commit b0b9607

Browse files
author
Roy Lin
committed
docs(box): CRI conformance 42 pass / 40 fail (regression re-run at 04a0969)
Authoritative full critest re-run after the session's 8 commits: 42 Passed / 40 Failed / 15 Skipped, no regressions. Updates the scoreboard — seccomp RuntimeDefault and safe sysctls now pass; remaining seccomp gap is localhost profiles only, remaining sysctls gap is unsafe (fs.mqueue, guest-kernel). All 40 failures are registry-egress / guest-kernel / architectural / test-image artifacts.
1 parent 04a0969 commit b0b9607

1 file changed

Lines changed: 12 additions & 9 deletions

File tree

docs/cri-conformance.md

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@ suite so regressions are visible and progress is measurable.
1717
| `critest` | v1.30.1 |
1818
| a3s-box | 2.0.5 (+ unreleased CRI maturity work, heading to 2.0.6) |
1919
| Host | Linux KVM node (`/dev/kvm`), Ubuntu 24.04 |
20-
| Result | **38 Passed · 44 Failed · 15 Skipped** (ran 82 of 97 specs, ~17 min) |
20+
| Result | **42 Passed · 40 Failed · 15 Skipped** (ran 82 of 97 specs, ~18 min) |
2121

2222
This is up from the original **21 Passed / 59 Failed** baseline (2.0.4): streaming
23-
exec/attach, container logs + reopen, and most of the Linux SecurityContext now
24-
pass. Several remaining "failures" are **test-environment artifacts**, not runtime
25-
defects (see below).
23+
exec/attach, container logs + reopen, force-RemoveContainer, safe sysctls,
24+
RuntimeDefault seccomp, and most of the Linux SecurityContext now pass. The
25+
remaining 40 failures are **all** registry-egress / guest-kernel / architectural
26+
/ test-image artifacts — none is a logic defect (see below).
2627

2728
How it was run:
2829

@@ -45,7 +46,7 @@ critest --runtime-endpoint unix:///tmp/a3s-box.sock \
4546
> `defaultTestContainerImage` + `webServerImage` are overridable via the images
4647
> file, so these pulls cannot be redirected to the mirror.
4748
48-
## What passes (38)
49+
## What passes (42)
4950

5051
- **Pod + container lifecycle:** `RunPodSandbox` (boots a microVM),
5152
`PodSandboxStatus`, `CreateContainer`, `StartContainer`, `ContainerStatus`,
@@ -57,8 +58,10 @@ critest --runtime-endpoint unix:///tmp/a3s-box.sock \
5758
- **Container logs:** writing to `log_path` and `ReopenContainerLog` (rotation).
5859
- **Linux SecurityContext:** `RunAsUser`, `RunAsGroup`, `RunAsUserName`
5960
(passwd lookup), reject `RunAsGroup` without `RunAsUser`, `SupplementalGroups`,
60-
`ReadonlyPaths`, seccomp `unconfined`/nil. `/proc` + `/sys` are mounted inside
61-
the container chroot.
61+
`ReadonlyPaths`, seccomp `unconfined`/nil/**RuntimeDefault** (default BPF
62+
filter → `Seccomp: 2`). `/proc` + `/sys` are mounted inside the container
63+
chroot.
64+
- **Pod sysctls:** safe sysctls applied at VM boot (`/proc/sys` writes).
6265
- Basic `ImageStatus`/`ListImages`.
6366

6467
## Real gaps (failures grouped by cause)
@@ -67,8 +70,8 @@ critest --runtime-endpoint unix:///tmp/a3s-box.sock \
6770
|----------|--------------------------|------------|---------------|
6871
| **Registry egress** (~22) | Multiple-Containers exec/log/network, image pull/list/status, DNS, port-mapping, port-forward, HostNetwork/PID/IPC, Privileged, ReadOnlyRootfs, NoNewPrivs, image-group SupplementalGroups | webserver/helper images on `registry.k8s.io`/`gcr.io` are unreachable and not overridable via the images file | ❌ environmental |
6972
| **Writable volume mounts** (~6) | starting container with volume (+ host-path symlink), mount propagation rshared/rslave/rprivate, non-recursive readonly mounts | only read-only mounts (materialized by copy) are supported; writable host-path volumes need a virtio-fs share into the VM, which libkrun configures at boot (containers are created post-boot) | ⚠️ architectural |
70-
| **seccomp filters** (~3) | seccomp `RuntimeDefault` (wants `Seccomp: 2`), localhost profile, SYS_ADMIN-block | no BPF seccomp filter is installed in the guest child | ✅ guest feature |
71-
| **sysctls** (~2) | safe/unsafe sysctls | pod sysctls not applied in the guest (`/proc/sys` writes) | guest feature |
73+
| **seccomp localhost profiles** (2) | localhost profile, SYS_ADMIN-block | RuntimeDefault now installs the default BPF filter (`Seccomp: 2`); localhost profiles need the host profile file plumbed into the VM + compiled | ⚠️ host-file plumbing |
74+
| **unsafe sysctls** (1) | `fs.mqueue.msg_max` | safe sysctls are applied (`/proc/sys` writes); the guest kernel lacks `CONFIG_POSIX_MQUEUE` so `/proc/sys/fs/mqueue/` is absent | guest-kernel |
7275
| **AppArmor** (~2) | unloaded profile, profile blocking writes | LSM not wired in the guest | ✅ guest feature |
7376
| **Capabilities** (~3) | add/drop capability, drop ALL | capabilities not managed per-container; `brctl` bridge test also needs a `CONFIG_BRIDGE` guest kernel | ⚠️ murky / possibly kernel-limited |
7477
| **MaskedPaths** (1) | mask `/bin/ls` | masking code is correct, but under the alpine/busybox substitution `/bin/ls` and `/bin/sh` are the same `busybox` binary, so masking `ls` breaks `sh`; the expected stderr needs `sh` to run | ❌ test-image artifact |

0 commit comments

Comments
 (0)