Avoid cache ancestor writes in read-only sandboxes #96
Open
ober
wants to merge 2 commits from
fix/cache-root-existing-ancestors into master
pull from: fix/cache-root-existing-ancestors
merge into: ober:master
ober:master
ober:fix/issue-97-deterministic-compilation
ober:chore/bump-version-0.13.2
ober:fix/issue-93-runtime-discovery
ober:feature/netbsd-amd64-release
ober:fix/issue-75-attributable-traces
ober:fix/issue-86-standalone-regression
ober:fix/freebsd-78-82
ober:docs/typed-effects-knowledge
ober:fix/kotlin-synchronized-modifier
ober:feat/kotlin-class-generic
ober:fix/ta6fb-multicall-subprocess
ober:fix/gerbil-prelude-test-tmpfile
ober:chez-upstream-security-sync-20260917
ober:feat/jpkg-self-update
ober:fix/issue-78-freebsd-compile-program-hang
ober:fix/runtime-dispatch-for-jerbuild
ober:feat/rustls-peer-cert-sha256
ober:jpkg-host-binary-packages
ober:chore/defer-stink-builder
ober:chore/new-jerboa-stink
ober:fix/pin-jsqlite-dtrace
ober:feat/dtrace-full
ober:feat/dtrace-runtime-full
ober:feat/dtrace-tooling-full
ober:fix/dtrace-jerbuild-freebsd
ober:fix/dtrace-freebsd-solid
ober:gc-dtrace-full
ober:docs/agents-checkout-hygiene
ober:chore/bump-vendor-jsqlite-gc-fix
ober:fix/dtrace-native-boundary
ober:chore/new-jerboa-install-hosts
ober:docs/agents-fj-cheatsheet
ober:feature/dtrace-foundation
ober:fix-issue-58
ober:fix/tls-timeout-gc-liveness
ober:docs/freebsd-dtrace-handoff
ober:chore/refresh-native-export-review-issue53
ober:fix/issue-53-jerboa-mcp-runtime
ober:feature/new-jerboa-skill
ober:fix/save-discoveries-hybrid-tools
ober:fix/astra-core-tooling-pools
ober:fix/mcp-save-discoveries-writers
ober:fix/macos-binary-uuid-default
ober:fix/astra-improv-t01
ober:feat/configurable-thread-http-body-limit
ober:fix/release-platform-portability
ober:fix/multicall-path-expand-import
ober:feat/astra-build-speed
ober:chore/freebsd-arm64-build-support
ober:codex/genode-port-probe
ober:feature/qnx-port
ober:fix/native-release-only
ober:fix/release-exact-freebsd-archive
ober:fix/freebsd-release-disable-x11
ober:fix-android-termux-tempdirs
ober:fix-android-termux-errno
ober:fix/safe-release-parallelism
ober:fix/release-parallel-makeflags
ober:fix/native-release-parallelism
ober:fix/native-release-targets
ober:fix/freebsd-release-native-lib
ober:fix/release-absolute-output
ober:fix/release-isolated-rust-target
ober:fix/release-isolated-caches
ober:fix/jpkg-no-stale-registry
ober:fix-linux-release-static-v086
ober:fix/release-artifact-binary-smoke
ober:fix/jmcp-jmap-startup-sync
ober:fix/jpkg-jerbuild-invocation
ober:chore/jmcp-external-data
ober:fix/jpkg-install-without-init
ober:data/discovery-updates-20260813-rebased
ober:finish/jolt-handoff-completion
ober:data/discovery-updates-20260813
ober:fix/jolt-test-imports
ober:feature/mcp-inprocess-dispatch
ober:feat/std-jolt
ober:feature/gerbil-compat-hamt-pmap
ober:feature/gerbil-sqlite-compat
ober:chore/ci-compiler-bootstrap
ober:fix/native-rs-unsafe-deny
ober:chore/commit-data-preserve
ober:feature/std-iter-parity2
ober:chore/forgejo-ci-pr-policy
ober:feature/std-iter-parity
ober:feature/std-test-check-output
ober:feature/agents-cicd-check
ober:feature/gerbil-list-sort-parity
ober:feature/jerb-gerb-compat
ober:feature/jerboa-koans
ober:chore/local-mine-authority-agents-20260803
ober:test/ci-required-doc-whitespace
ober:release-assets-v0.2.8
ober:cross
ober:wip/native-hmac-ed25519-verify
ober:secure
No reviewers
Labels
Clear labels
No items
No labels
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference
ober/jerboa!96
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/cache-root-existing-ancestors"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Change
open_secure_cache_rootnow opens and validates each existing path component before attempting creation. It callsmkdiratonly afteropenatreturnsENOENT, then reopens and validates the component. This lets the bundledjerbuilduse a populated cache inside a read-only sandbox.The existing
O_NOFOLLOW, descriptor-based traversal, owner/mode checks, and atomic bundle extraction path remain in place. A focused C test exercises the production function with existing and missing components, a deniedmkdirat, a concurrent creator, a symlink substituted during that race, insecure modes, symlinks, and parent traversal.VERSIONadvances to 0.13.3 as required by repository policy.Issue #93 concerns a separate MCP launcher/cache selection mismatch; this change addresses the concrete cache-root sandbox failure.
Verification (macOS arm64)
make test-secure-cache-root— pass.make binary— pass.make jerboa-smoke— pass, including a fresh bundle extraction and all multicall modes.XDG_CACHE_HOME=/Users/user/work/jerboa-cache-fix/build/jerboa-smoke-cache sandbox-exec -p '(version 1)(deny default)(allow process-exec)(allow file-read*)' /Users/user/work/jerboa-cache-fix/dist/jerbuild --jerboa-home— pass against the populated cache with file writes denied.git diff --check— pass.View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.