|
3 | 3 | > Status: draft v0.3, May 2026 — authoritative consolidation of the |
4 | 4 | > exec-domain feature family for compartment-bpf |
5 | 5 | > Audience: implementers, profile authors, reviewers |
6 | | -> Companion to: `SIGNED-POLICY-SPEC.md`, `ARCHITECTURE.md` |
| 6 | +> Companion to: the future signed-policy / `bpf_gate` design notes and |
| 7 | +> the broader compartment-bpf design rationale |
7 | 8 | > Prerequisite: v0 enforcement surface (existing seal model) |
8 | 9 | > Lineage: LIDS exec-domain (1998–2002) — historical motivation |
9 | 10 | > for the actor-allowlist property; the author's 2001 |
@@ -300,7 +301,7 @@ worker has the same `mm->exe_file` inode. |
300 | 301 | - **T-X4. CAP_BPF process direct map mutation.** Root with |
301 | 302 | `bpftool map update` against the seal map can bypass enforcement |
302 | 303 | without a kernel-side gate. The v0 model assumes a trusted load |
303 | | - phase. The defense is `SIGNED-POLICY-SPEC.md` §7 `bpf_gate` — |
| 304 | + phase. The defense is future `bpf_gate` work — |
304 | 305 | *out of this spec's scope* but compatible with it. |
305 | 306 |
|
306 | 307 | - **T-X5. Exec via interpreter chain — NOT a bypass.** Actor |
@@ -468,7 +469,7 @@ every failed unpin attempt durable — silent suppression requires |
468 | 469 | compromising both channels. |
469 | 470 |
|
470 | 471 | The real defense against malicious unpin by a CAP_BPF-equipped |
471 | | -attacker remains `bpf_gate` (see `SIGNED-POLICY-SPEC.md` §7), |
| 472 | +attacker remains `bpf_gate` (see the future signed-policy work), |
472 | 473 | which puts an LSM gate on `BPF_PROG_DETACH` and `BPF_OBJ_GET` |
473 | 474 | from non-agent tasks. That is out of this spec's scope and is not |
474 | 475 | implemented in v0.x. Until `bpf_gate` lands, a CAP_BPF user can |
@@ -1419,7 +1420,7 @@ unpacker. The unpacker is a transport. |
1419 | 1420 |
|
1420 | 1421 | ### 15.2 What the addendum proposes |
1421 | 1422 |
|
1422 | | -Two reserved TLVs in `SIGNED-POLICY-SPEC.md` §4.3 — `EXEC_DELEGATE` |
| 1423 | +Two reserved TLVs in the future signed-policy design — `EXEC_DELEGATE` |
1423 | 1424 | (0x07) and `DOMAIN_CLAIM_MAP` (0x08) — plus `DOMAIN_FLAG_ALLOW_ANON_EXEC` |
1424 | 1425 | on `DOMAIN_DEF`. Six requirements (R-22..R-27 in the addendum's |
1425 | 1426 | numbering) wire `bpf_gate` to admit claim-map writes only from |
@@ -1552,11 +1553,11 @@ additions (T-7 / T-8 / T-9 in the addendum's numbering). |
1552 | 1553 |
|
1553 | 1554 | ## 17. References |
1554 | 1555 |
|
1555 | | -- `SIGNED-POLICY-SPEC.md` — §7 `bpf_gate`. Compatible with this |
| 1556 | +- Future signed-policy / `bpf_gate` work — compatible with this |
1556 | 1557 | spec; not required. Shape B for unpin protection. |
1557 | | -- `ARCHITECTURE.md` — overall component shape; this exec-domain |
1558 | | - family slots into the daemon's existing inode-keyed seal model |
1559 | | - without changing the management-plane assumptions. |
| 1558 | +- Broader compartment-bpf design rationale — this exec-domain family |
| 1559 | + slots into the daemon's existing inode-keyed seal model without |
| 1560 | + changing the management-plane assumptions. |
1560 | 1561 | - `tools/profile-draft.py` — drafting tool that this spec extends |
1561 | 1562 | with discovery-input ingestion (§13). DT_NEEDED expansion is |
1562 | 1563 | explicitly NOT part of this spec; libraries are loaded via |
@@ -1607,7 +1608,7 @@ additions (T-7 / T-8 / T-9 in the addendum's numbering). |
1607 | 1608 | binary's identity comes from the binary being itself sealed |
1608 | 1609 | against modification (E-6 for actors, X-6 for exec-trust), |
1609 | 1610 | not from cryptographic measurement. TPM / IMA integration is |
1610 | | - `SIGNED-POLICY-SPEC.md` territory. |
| 1611 | + future signed-policy territory. |
1611 | 1612 | - **Not anonymous-inode content verification.** Even with the |
1612 | 1613 | Exec_Enc addendum (§15) adopted, the spec does NOT verify what |
1613 | 1614 | bytes the kernel runs from an anonymous inode; trust is |
|
0 commit comments