Repository navigation
feat(linux): add execution boundary and containment lab - #14
Merged
Merged
Conversation
Signed-off-by: stacknil <219124580+stacknil@users.noreply.github.com>
Signed-off-by: stacknil <219124580+stacknil@users.noreply.github.com>
stacknil
marked this pull request as ready for review
October 31, 2026 07:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
A successful spawn, numeric PID or process-group kill does not establish a successful exec or complete descendant containment. This standalone C++20 lab exercises those distinctions with bounded, locally compiled synthetic fixtures.
Invariant
Reports separate attempted setup, acknowledged controls and observed outcomes. Strict unsupported whole-tree requests refuse before fork. No production sandbox, EDR or arbitrary-tree containment guarantee is claimed.
Design decision
Use gated fork/execveat, pidfd tracking and exact waiting, a post-exec fixture witness, monotonic deadlines and cancellation, bounded nonblocking output capture, and observed child reaping. Process-group cleanup covers cooperating descendants under documented exclusive-supervisor preconditions. Resource limits, conditional Landlock and a narrow seccomp experiment remain independently reported. A separate Python oracle checks manifests and rejects false claims.
Threat and failure model
Tests cover synthetic launch failures, races, resource failures, inherited descriptors, interrupted cleanup and contradictory reports. Fixed fixtures run under external watchdog/resource bounds. Detached descendants are not executed without verified secondary containment.
Rejected alternatives
Compatibility
The four existing saved-evidence labs and their contracts remain unchanged. The original signed contribution is 66f5afe. Scoped hosted CI is the separate signed DCO commit a496df7; the original commit and all 23 accepted files are unchanged.
Validation
Independent source and fresh native Linux reviews accepted the local core with documented limits:
Hosted qualification at a496df7:
Ubuntu 24.04 workers reported kernel 7.0.0-1017-azure and Landlock ABI 8 with the full profile exercised. Cgroup delegation was unavailable; E09 remained NOT_RUN; strict whole-tree requests refused. Hosted sanitizer qualification was NOT_RUN; the local ASan/UBSan result above is separate. CTest success does not imply every optional scenario ran.
CI uses read-only contents permission, non-root execution, no sudo or package installation, fixed job/test timeouts and build parallelism 2. Checkout does not retain credentials. Logs disclose actual conditional results. The existing Python CI is unchanged.
Rollback
The lab is isolated under projects/linux-exec-boundary; withdrawing it and its separate scoped workflow leaves the existing lab interfaces intact.
READY_FOR_MERGE_REVIEW after hosted qualification and read-only content/signature/check audit. Kept draft for maintainer review under the boundary-change policy. No unresolved review threads or blocking reviews were present at audit time; no applicable main protection/rules were configured. Merge is not authorized.