~0x64616E69656C
project 03 / R2 / real host evidence / 2026-10-25

Host prevention.
Evidence still incomplete.

AppArmor denied the defined harmless writes independently of nginx and delivered genuine kernel audit records to an isolated receiver. BPF loaded and attached, but a controller error stopped its protected tests. Real-evidence HTTP containment remains untested.

THREE STAGES / THREE DISTINCT OUTCOMES
G1 / AppArmor prevention: scoped PASS.
G1B / BPF enforcement: INCONCLUSIVE.
Integrated HTTP containment: NOT RUN.
No production integration or technology selection.
66
G1 native operations completed
18 / 18
protected writes denied / bytes unchanged
15 / 15
unprotected canary writes succeeded
33 / 33
permitted-file controls succeeded
Host boundary demonstrated / evidence chain incomplete25 October 2026 · bounded research · no deployment
01 / RESEARCH QUESTION

Can the host enforce
without giving nginx the keys?

R2 separates prevention at the host, authentic kernel evidence and a response decision before client delivery. Each boundary needs its own proof. A successful first stage cannot stand in for the whole chain.

01 / PREVENT

Deny the precisely defined native canary operation even when experimental nginx is stopped or its evidence receiver is unavailable.

02 / INFORM

Carry authentic, attributable kernel evidence across a privilege boundary without giving an nginx worker policy control or shared writable transport authority.

03 / VERIFY DELIVERY

Use genuine evidence in nginx Gate A+B, then independently verify what the HTTP/2 client received. This stage was not run in R2.

R0 established a retrospective stock-nginx metadata baseline. R1 demonstrated scoped synthetic HTTP/2 containment but failed its overall CPU budget at +22.10% against a +10% target. R2 asks whether actual host prevention and genuine evidence can support that response-aware direction. Historical synthetic events cannot answer it.

Bounded operation, bounded claim: dedicated fixture identities attempted harmless writes to dedicated canary files. No real exploit, encryption, destructive test or memory-exhaustion experiment was performed. The result does not establish general exploit prevention or protection from arbitrary nginx compromise.
02 / G1 · SCOPED PASS

The write was denied.
The boundary stood alone.

AppArmor completed the frozen seven-arm native matrix: 33 canary operations and 33 permitted-file controls. All 18 protected writes were denied with unchanged file bytes; all 15 unprotected canary writes and all 33 permitted controls succeeded.

INDEPENDENT HOST ENFORCEMENT / PASS

Protection survived missing observers.

The same enforcing policy remained in place across the audited baseline, unavailable-receiver arm and stopped-nginx arm. Denial continued without either the independent receiver or experimental nginx.

This demonstrates a functioning host enforcement boundary for the tested operation. nginx did not have to receive an alert or make a decision for the write to be denied.

INDEPENDENT NATIVE ORACLE

Check identity, errno and bytes.

The unchanged native C++23 fixture used dedicated 32-byte canary and permitted files with fixed discretionary permissions. Before releasing each operation, an independent oracle checked the live executable, identity, capabilities and AppArmor label.

Afterward it checked the actual return and errno, complete file bytes and hash, and file identity. Successful unprotected writes and permitted controls distinguish policy denial from a generally broken write path.

G1 / complete native matrix. Each row also includes the same number of permitted-file writes.
ArmCanary attemptsDeniedPermitted writesAttributed kernel records
U0 / unconfined505 / 5 succeeded0
C0 / complain505 / 5 succeeded5 ALLOWED
A0 / audited enforce555 / 5 succeeded5 DENIED
A1 / receiver unavailable555 / 5 succeededReceiver deliberately absent
A2 / nginx stopped555 / 5 succeeded5 DENIED
Q0 / quiet deny333 / 3 succeeded0 / quiet denial
U1 / profile removed505 / 5 succeeded0

C0 used implicit omission in complain mode. A0, A1 and A2 retained the same enforcing profile. Q0 deliberately denied quietly. The absent receiver and quiet-denial outcomes are separate controls; silence is not evidence that an operation was safe.

Real evidence / narrow PASS: five complain-mode ALLOWED records and ten audited DENIED records reached the isolated receiver from the kernel. They prove this audit path under the controlled G1 conditions, without establishing a production notification-latency guarantee.
03 / G1B · INCONCLUSIVE

Installed in the kernel.
Enforcement not tested.

The unchanged BPF candidate passed kernel verification and CO-RE loading. A real BPF LSM file_open program was attached and pinned. The controller then stopped before the first BPF-protected canary attempt.

OBSERVED / INSTALLATION

The candidate could attach.

Before protected testing, five AppArmor-permit canary writes and five permitted-file controls succeeded. The BPF candidate then loaded its selectors, froze the intended policy and statistics maps, and attached through a protected pinned link.

These observations establish successful installation of this candidate. Verifier acceptance and attachment do not show that the requested canary operation would be denied.

STOPPING POINT / CONTROLLER ERROR

Descriptor ownership broke the handoff.

The controller detected an occupied FD3 while preparing descriptor handoff to the consumer. The exact identity of the colliding descriptor was not captured. The run stopped before a consumer started and before the first protected attempt.

The started native campaign was not repeated. A safer child-only descriptor handoff was prepared and checked offline; that preparation was neither integrated BPF validation nor a completed G1B result.

G1B / evidence obtained versus evidence still absent.
BoundaryActual resultLimit
AppArmor-permit baseline5 canary + 5 permitted writes succeededControls completed before BPF-protected testing
Kernel installationVerifier / CO-RE accepted; LSM program attached and pinnedNo protected canary operation followed
BPF denialNot observedNo enforcement success or failure can be inferred
Evidence and lifecycle armsNot executedNo ring delivery, loader-exit persistence, nginx-independent enforcement, read-only snapshot integrity or overflow result

Earlier preparation failures concerned parent-mount qualification and the kernel-set sticky bit on the dedicated bpffs root. Both stopped with zero native operations and no BPF load or attachment. Their records were preserved separately. They are setup failures, not BPF policy-enforcement outcomes.

G1B remains INCONCLUSIVE. The observed controller failure leaves the enforcement and evidence questions unanswered. It supports neither a BPF prevention PASS nor a BPF prevention FAIL.
04 / TRUST BOUNDARIES

Readable evidence
still carries authority.

Host prevention, evidence provenance and worker access rights are different properties. R2 preserved the earlier shared-ring consumer-cursor finding and the protected-snapshot versus minimal-broker comparison.

G1's isolated receiver consumed a delegated kernel audit read subscription under a separate fixture identity, with capabilities dropped and no-new-privs. It checked kernel provenance, framing and the exact profile, path and write fields. An independent launch ledger attributed each process to its controlled attempt. All expected records matched; no unmatched record, receiver parsing or subscription error, or audit-lost increment was observed.

SHARED RING / MUTABLE CONSUMER CURSOR

Reading can include control.

The shared BPF ring's writable consumer cursor is authority over evidence consumption. It belongs in an isolated broker, not in an arbitrary nginx worker. The campaign granted no worker that cursor.

A minimal broker can own ring consumption and pass bounded evidence across a narrower interface. Its privileges, lifecycle, restart behavior and failure handling still count as system complexity.

PROTECTED SNAPSHOT / SEPARATE ARRANGEMENT

Read-only needs its own proof.

A protected read-only snapshot is a different arrangement from direct ring consumption. It may narrow worker authority, but G1B did not validate snapshot rights or integrity.

A readable map also does not establish that its enforcing link remains attached. Snapshot access, evidence freshness and enforcement liveness need distinct treatment; no measured comparison with the minimal broker exists.

nginx is still a trust boundary: isolation between workers sharing an identity remains unproven for memory, descriptors and signals. A compromised nginx can defeat its own Gate B. Independent host denial must remain effective even when nginx misses, ignores or mishandles evidence.

The AppArmor result reached the isolated receiver only. No AppArmor/broker versus BPF/ring/broker versus BPF/snapshot transport or cost comparison was completed. Small controlled samples establish no production timing bound or BPF performance advantage.

05 / HTTP · NOT RUN

No genuine event
reached Gate A+B.

The required native prevention and evidence prerequisites were incomplete. The prescribed stage gate therefore blocked integrated HTTP testing. R2 contains no HTTP/2 client-byte containment result.

R2 / what each stage actually established.
StagePublic statusEvidence boundary
G1 / AppArmorSCOPED PASSNative prevention and genuine kernel audit delivery to the isolated receiver
G1B / BPF LSMINCONCLUSIVEInstallation observed; protected native operations and evidence transport not validated
Integrated Gate A+BNOT RUNNo real kernel evidence reached the integrated nginx gate; no independent R2 client-byte result
No synthetic substitute: R1's functional containment PASS remains historical evidence for its own synthetic HTTP/2 test. Its overall CPU-budget FAIL at +22.10% also remains unchanged. Neither result fills R2's real-evidence gap.

No R2 comparison of forbidden, legitimate sensitive, ordinary and unrelated HTTP/2 streams was run. There is no hold-window correlation, zero-byte or partial-byte outcome, collateral-containment or reload-overlap result. G1's simple static HTTP liveness controls were separate fixture checks, not response containment.

06 / OPERATIONS & LIMITS

Count the whole system.
Verify the cleanup.

bpffs setup, pinned links, descriptor ownership and lifecycle added operational work around the short BPF program. Some belongs to the experimental harness; some may remain in a future production architecture. That distinction is unresolved.

FINAL STATE / INDEPENDENT CHECKS

Experimental security state removed.

Independent final inspection found no remaining experimental BPF programs, maps, links or AppArmor profiles. The dedicated bpffs was unmounted normally, and experimental runtime targets were removed.

Original audit settings and the recorded existing service identities and configurations were preserved. No existing service was signalled or reconfigured. These checks do not verify every byte of user data.

COST / NO MATCHED COMPARISON

Installation is not an efficiency result.

The completed AppArmor stage and stopped BPF setup are not comparable end-to-end cost samples. R2 establishes no BPF performance or operational advantage.

Upgrade and recovery behavior, broker restart continuity and hostile-worker isolation remain unverified. The experiment's failures and partial ledgers were retained; offline handoff preparation does not erase the stopped campaign.

No adoption follows: no dh_apparmor adoption, BPF product decision or production integration was made. AppArmor is the established comparison baseline for the tested operation, not an automatically selected architecture.
07 / ARCHITECTURAL FINDING

A boundary proved.
A chain still open.

This is an architectural question, not a race between enforcement technologies. AppArmor demonstrated independent host prevention. BPF demonstrated installation of the candidate; the policy-enforcement comparison remains inconclusive.

The research continues to favor KISS: minimal upstream changes, independent host enforcement and, ideally, no permanent privileged evidence broker. Those are design goals. A small kernel program cannot by itself settle the complexity of installation, privilege separation, evidence transport, lifetime management and recovery.

A smaller program is not necessarily a smaller security system.Count the authority and lifecycle around the program as well as the code inside it.

R2 proved the scoped AppArmor host boundary and its isolated kernel-audit path. Whether timely, trustworthy real evidence can reach nginx Gate A+B and support independently verified client-byte containment remains unanswered.