refactor: identify bubblewrap sandbox violations

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
viyatb-oai
2026-07-07 12:44:06 -07:00
co-authored by Codex
parent 33735280cf
commit 27facbf916
14 changed files with 196 additions and 137 deletions
+5 -2
View File
@@ -13,6 +13,7 @@ use codex_sandboxing::SandboxDirectSpawnTransformRequest;
use codex_sandboxing::SandboxExecRequest;
use codex_sandboxing::SandboxManager;
use codex_sandboxing::SandboxTransformRequest;
use codex_sandboxing::SandboxType;
use codex_sandboxing::SandboxablePreference;
use codex_utils_absolute_path::AbsolutePathBuf;
use codex_utils_absolute_path::canonicalize_preserving_symlinks;
@@ -103,13 +104,16 @@ impl FileSystemSandboxRunner {
let helper = &self.runtime_paths.codex_self_exe;
let sandbox_manager = SandboxManager::new();
let (file_system_policy, network_policy) = permission_profile.to_runtime_permissions();
let sandbox = sandbox_manager.select_initial(
let mut sandbox = sandbox_manager.select_initial(
&file_system_policy,
network_policy,
SandboxablePreference::Auto,
sandbox_context.windows_sandbox_level,
/*has_managed_network_requirements*/ false,
);
if sandbox_context.use_legacy_landlock && sandbox == SandboxType::LinuxBubblewrap {
sandbox = SandboxType::LinuxLegacyLandlock;
}
let command = SandboxCommand {
program: helper.as_path().as_os_str().to_owned(),
args: vec![CODEX_FS_HELPER_ARG1.to_string()],
@@ -142,7 +146,6 @@ impl FileSystemSandboxRunner {
network: None,
sandbox_policy_cwd: &cwd.uri,
codex_linux_sandbox_exe: self.runtime_paths.codex_linux_sandbox_exe.as_deref(),
use_legacy_landlock: sandbox_context.use_legacy_landlock,
windows_sandbox_level: sandbox_context.windows_sandbox_level,
windows_sandbox_private_desktop: sandbox_context
.windows_sandbox_private_desktop,
+7 -3
View File
@@ -78,13 +78,16 @@ pub(crate) fn prepare_exec_request(
);
let (file_system_policy, network_policy) = permissions.to_runtime_permissions();
let sandbox_manager = SandboxManager::new();
let sandbox = sandbox_manager.select_initial(
let mut sandbox = sandbox_manager.select_initial(
&file_system_policy,
network_policy,
SandboxablePreference::Require,
sandbox_context.windows_sandbox_level,
params.enforce_managed_network,
);
if sandbox_context.use_legacy_landlock && sandbox == SandboxType::LinuxBubblewrap {
sandbox = SandboxType::LinuxLegacyLandlock;
}
match sandbox {
SandboxType::None => {
return Err(invalid_params(
@@ -98,7 +101,9 @@ pub(crate) fn prepare_exec_request(
"sandboxed remote process launch is not supported on Windows".to_string(),
));
}
SandboxType::MacosSeatbelt | SandboxType::LinuxSeccomp => {}
SandboxType::MacosSeatbelt
| SandboxType::LinuxBubblewrap
| SandboxType::LinuxLegacyLandlock => {}
}
let (program, args) = params
.argv
@@ -127,7 +132,6 @@ pub(crate) fn prepare_exec_request(
network: None,
sandbox_policy_cwd,
codex_linux_sandbox_exe: runtime_paths.codex_linux_sandbox_exe.as_deref(),
use_legacy_landlock: sandbox_context.use_legacy_landlock,
windows_sandbox_level: sandbox_context.windows_sandbox_level,
windows_sandbox_private_desktop: sandbox_context.windows_sandbox_private_desktop,
},