fix: --kernel =PATH syntax, exit-code cleanup, bind warning in VM mode
- --kernel took an optional value greedily, swallowing the DISTRO positional: 'ecr --kernel alpine' failed with a missing-argument error and 'ecr --kernel alpine -- cmd' pulled a garbage OCI ref. require =PATH syntax for the kernel path instead. - setup_namespaces returns the child's exit code (or 128+signal) instead of calling process::exit, so the extracted rootfs tempdir is cleaned up before exiting instead of leaking into /tmp. - warn that --bind/--bind-rw are ignored when booting with --kernel.
This commit is contained in:
+8
-8
@@ -58,8 +58,10 @@ pub fn check_user_namespace() -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Setup namespaces and run the provided function inside them
|
||||
pub fn setup_namespaces<F>(f: F) -> Result<()>
|
||||
/// Setup namespaces and run the provided function inside them.
|
||||
/// Returns the child's exit code (0 on success, 128+signal when killed by a
|
||||
/// signal). Setup failures are returned as Err.
|
||||
pub fn setup_namespaces<F>(f: F) -> Result<i32>
|
||||
where
|
||||
F: FnOnce() -> Result<()> + Send + 'static,
|
||||
{
|
||||
@@ -222,20 +224,18 @@ where
|
||||
let status = nix::sys::wait::waitpid(pid, None)?;
|
||||
|
||||
match status {
|
||||
nix::sys::wait::WaitStatus::Exited(_, 0) => Ok(()),
|
||||
nix::sys::wait::WaitStatus::Exited(_, 0) => Ok(0),
|
||||
nix::sys::wait::WaitStatus::Exited(_, code) => {
|
||||
// If the child reported an error (e.g., setup failure), return it.
|
||||
// Otherwise, just forward the exit code without an error message.
|
||||
if let Some(msg) = child_error {
|
||||
Err(anyhow!("{}", msg))
|
||||
} else {
|
||||
std::process::exit(code);
|
||||
Ok(code)
|
||||
}
|
||||
}
|
||||
nix::sys::wait::WaitStatus::Signaled(_, sig, _) => {
|
||||
Err(anyhow!("Child process killed by signal {:?}", sig))
|
||||
}
|
||||
_ => Ok(()),
|
||||
nix::sys::wait::WaitStatus::Signaled(_, sig, _) => Ok(128 + sig as i32),
|
||||
_ => Ok(0),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user