Skip to content

Commit 6237f8d

Browse files
committed
docs: document legacy read-only sandbox mode on kernels before 5.19
Kernels without SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV (< 5.19, e.g. RHEL 9.x / RHCOS 5.14) run the sandbox in a legacy read-only cancellation mode where the broker fails closed with EOPNOTSUPP on the mediated operations that write results back into workload memory (getpeername, accept/accept4 with a non-null address, sendmmsg length write-backs). Document this observable behavior and its syscall limitations in the public Fern docs: the support-matrix kernel requirements and the OpenShift runtime guidance. Signed-off-by: Akram <akram.benaissi@gmail.com>
1 parent 617f097 commit 6237f8d

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

‎docs/kubernetes/openshift.mdx‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,21 @@ process to install a nested seccomp user-notification filter and use Landlock.
1919
OpenShell fails sandbox startup when either capability-free runtime probe fails.
2020
</Warning>
2121

22+
## Node kernel and legacy read-only mode
23+
24+
OpenShift nodes run RHCOS, which currently ships a RHEL 9.x kernel (5.14). That
25+
kernel predates `SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV` (Linux 5.19), so the
26+
sandbox starts in a reduced **legacy read-only** cancellation mode. Isolation is
27+
unchanged, but the broker fails closed with `EOPNOTSUPP` on the mediated
28+
operations that write results back into workload memory — `getpeername`,
29+
`accept`/`accept4` with a non-null peer-address argument, and `sendmmsg`
30+
per-message length write-backs. Outbound-oriented workloads run unchanged;
31+
server workloads that read the peer address on accept need a node kernel with
32+
`WAIT_KILLABLE_RECV` (Linux 5.19+, or a distribution backport). See the
33+
[support matrix](/reference/support-matrix#legacy-read-only-mode-kernels-before-linux-519)
34+
for the full behavior; the selected mode is reported as `seccomp_listener_mode`
35+
in the sandbox qualification output.
36+
2237
## Prerequisites
2338

2439
- OpenShift 4.x cluster with `oc` configured.

‎docs/reference/support-matrix.mdx‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,37 @@ when it runs inside a container or microVM:
103103
| -------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
104104
| [Landlock LSM](https://docs.kernel.org/security/landlock.html) | Required | ABI 3 or newer, introduced in Linux 6.2, with Landlock enabled. The mandatory baseline protects private channel and bootstrap files, including against truncation. A filesystem policy's `best_effort` setting never disables this baseline. |
105105
| seccomp | Required | Nested user-notification filters and atomic `SECCOMP_IOCTL_NOTIF_ADDFD` with `SECCOMP_ADDFD_FLAG_SEND`, usable under the runtime's existing seccomp profile without added capabilities. The sandbox actively probes these operations before admitting the workload. |
106+
| seccomp `WAIT_KILLABLE_RECV` | Recommended (Linux 5.19+) | Keeps a notified workload thread in a kill-only wait so the broker can safely write mediated results into workload memory. Without it (kernels &lt; 5.19, for example RHEL 9.x / RHCOS 5.14) the sandbox still starts, in a reduced **legacy read-only** mode described below. |
106107

107108
A kernel version alone does not establish support. A disabled Landlock LSM or a
108109
runtime profile that blocks the required seccomp operations causes launch to
109110
fail closed. An upstream Linux 6.2 or newer kernel provides the required
110111
Landlock ABI; distribution backports must pass the same active qualification.
111112

113+
### Legacy read-only mode (kernels before Linux 5.19)
114+
115+
`SECCOMP_FILTER_FLAG_WAIT_KILLABLE_RECV` was added in Linux 5.19. On older
116+
kernels — notably RHEL 9.x and RHCOS, which ship a 5.14 kernel — the sandbox
117+
cannot install a kill-only listener, so it falls back to a plain listener and
118+
runs in a **legacy read-only** cancellation mode. The sandbox starts and
119+
enforces the full isolation boundary (Landlock, the outer NetworkPolicy fence,
120+
DNS and TCP authorization); the only difference is that the broker refuses the
121+
mediated operations that write results back into workload memory, failing them
122+
closed with `EOPNOTSUPP`:
123+
124+
- `getpeername`;
125+
- `accept` / `accept4` **when a non-null peer-address argument is supplied**
126+
(a null address argument still works);
127+
- `sendmmsg` paths that write per-message lengths back to the caller.
128+
129+
Socket creation, `connect`, `bind`, `listen`, `sendto`, and `sendmsg` are
130+
unaffected. Outbound-oriented workloads generally run unchanged; server
131+
workloads whose accept wrappers request the peer address will see `EOPNOTSUPP`
132+
until the node runs a kernel that provides `WAIT_KILLABLE_RECV` (Linux 5.19+, or
133+
a distribution backport). The selected mode is reported in the sandbox
134+
qualification output as `seccomp_listener_mode` (`killable` or
135+
`legacy_read_only`).
136+
112137
On macOS, these kernel modules run inside the Docker Desktop Linux VM, not on the host kernel.
113138

114139
## Agent Compatibility

0 commit comments

Comments
 (0)