Windows sandbox state file corrupted with NUL bytes, causing repeated ACL/permission failures
Open 💬 3 comments Opened Jun 26, 2026 by Mareng98
💡 Likely answer: A maintainer (github-actions[bot], contributor)
responded on this thread — see the highlighted reply below.
What version of the Codex App are you using (From “About Codex” dialog)?
26.616.81150
What subscription do you have?
Plus
What platform is your computer?
Windows 10
What issue are you seeing?
Codex Desktop on Windows got stuck with repeated sandbox ACL / permission failures for normal workspace operations.
Symptoms:
- Repeated approvals / blocks for normal workspace operations
- Local image reads failed with Windows sandbox ACL errors
- Some files were reported as owned by CodexSandboxOffline
- %USERPROFILE%\.codex\.sandbox\deny_read_acl_state.json was filled with NUL bytes instead of valid JSON
What steps can reproduce the bug?
I do not have exact repro steps, but I believe it happened after cancelling/stopping prompts while Codex was doing image generation / local image inspection / file editing.
Manually adding deny_read_acl_state.json filled with null bytes could potentially reproduce the issue.
What is the expected behavior?
Cancelling a prompt should not leave persistent corrupted Windows sandbox state. If deny_read_acl_state.json is invalid, Codex should detect that and regenerate it automatically.
Additional information
_No response_
3 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
I put up a focused branch for the corrupted
deny_read_acl_state.jsonpath: https://github.com/openai/codex/compare/main...Nicolas0315:codex:codex/windows-deny-read-state-recoverCommit:
d0618f3ebc2c8554cd13e0b1e12b59ecb8b1eb45What changed:
Validation:
rtx4090:just fmt,git diff --check, targeted new tests -> 2/2 passed;just test -p codex-windows-sandbox-> 130/130 passed, 2 skipped.cyberagent-mac-m5maxover SSH at the exact commit:git diff --check HEAD~1 HEAD,just test -p codex-windows-sandbox-> 10/10 passed on macOS-exposed tests.nicolas2025over SSH at the exact commit:git diff --check HEAD~1 HEAD,cargo test -p codex-windows-sandbox deny_read_state::tests-> 2/2 passed. A fullcargo test -p codex-windows-sandboxon this host compiled and ran the new tests successfully, but later failed in unrelated legacy unified-exec process tests (legacy_capture_*/legacy_non_tty_*) that are outside this state-file path.nicolas-macbook-proover SSH at the exact commit:git diff --check HEAD~1 HEADpassed; Rust tests skipped because cargo is not installed on that host.rtx5060tiover SSH at the exact commit:git diff --check HEAD~1 HEADpassed; Rust tests skipped due the known local MSVC linker configuration issue on that host.Remaining caveat: once the state file is already unrecoverably corrupt, Codex cannot know the old per-SID path inventory from that file. This patch prioritizes regenerating usable state so sandbox setup can proceed and future writes are valid/atomic.
I hit the same failure on Codex Desktop for Windows, and can add a diagnostic-cost/recovery data point.
Environment
26.730.7989.026.803.8161.0/ runner0.147.0-alpha.6.5Captured state
The preserved file is exactly 22 NUL bytes:
The first parse failure in my retained logs is 2026-08-05 13:22:46 UTC. The same corrupt file was still aborting setup on 2026-08-16 02:12:43 UTC. Across those two daily logs there are 200
parse deny-read ACL stateentries. The internal log identifies the file and parser error:But the user/tool-facing failure was only
helper_unknown_error: apply deny-read ACLs. Because this occurs before the requested process starts, that message strongly suggests workspace or endpoint ACL trouble and can drive a long investigation of unrelated repository ACLs, installer/uninstaller code, service code, test harnesses, and NTFS/event logs.Quarantining the file and retrying immediately regenerated the valid 22-byte state:
The next log entries show
processed 3 write roots ... errors=[],setup binary completed, andread ACL run completed.This reinforces four changes already suggested here and in related reports:
I can provide the preserved corrupt file and private raw sandbox logs to OpenAI support if useful; I am not attaching the raw logs publicly because they contain local paths and command text.