sandbox: split spawn() into create()/start() for OCI-style lifecycle#45
Merged
Conversation
Signed-off-by: Cong Wang <cwang@multikernel.io>
Signed-off-by: Cong Wang <cwang@multikernel.io>
…ity with Rust Signed-off-by: Cong Wang <cwang@multikernel.io>
Signed-off-by: Cong Wang <cwang@multikernel.io>
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.
Summary
Sandbox::spawn*(Rust) with a fork-park-exec split:create(cmd)forks the child, installs the full policy (seccomp+notif supervisor, rlimits, landlock, COW, network/HTTP proxies), and parks the child between policy install andexecve;start()releases it.run(cmd)and friends becomecreate + start + waitinternally.sandlock_create+sandlock_start, replacingsandlock_spawn) and Python (Sandbox.create,Sandbox.start;Sandbox.spawn(cmd)is now the sugar that composes them, taking over the name from the priorSandbox.start(cmd)).RuntimeState::Created), preventing a zombie regression introduced by the state stayingCreatedafterdo_create.create_with_io/create_with_gather_io; therun/run_interactive/run_with_extra_handlers/dry_runpublic surface is unchanged.This unblocks an OCI runtime shim (PR #31 territory) that needs to fork the container init in
runtime create, return to containerd, then signalruntime startlater: a long-lived daemon holds theSandboxparked across the two CLI invocations, with the full sandlock policy applied (not just Landlock).Test plan
cargo test --workspace: 212 integration tests passingpytest python/tests: 247 tests passing (was 241; 6 new intest_lifecycle.pycoveringspawn+wait,createpid/parked state,create+start, state-guard errors, and the Drop reap)🤖 Generated with Claude Code