From 71a7c0de6f6bbb60d20b48d869107d68beb0f217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Date: Thu, 9 Jul 2026 22:51:15 +0200 Subject: [PATCH] debug: fix spawn arg0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabiano FidĂȘncio --- src/libs/kata-sys-util/src/hooks.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libs/kata-sys-util/src/hooks.rs b/src/libs/kata-sys-util/src/hooks.rs index f644d069e4..bbdd19711c 100644 --- a/src/libs/kata-sys-util/src/hooks.rs +++ b/src/libs/kata-sys-util/src/hooks.rs @@ -286,9 +286,15 @@ impl<'a> HookExecutor<'a> { /// Spawn the subprocess, optionally feeding `state` to its stdin. fn spawn(&self, state: Option<&runtime_spec::State>) -> Result { - let mut exec = Exec::cmd(&self.args[0]) + // Execute the hook's `path` (an absolute path, validated in `new`) directly. + // Using `args[0]` as the command would PATH-search a bare program name, which + // only resolves when the binary lives in the compiled-in default PATH + // (/bin:/usr/bin) after `env_clear()` - so hooks outside it (e.g. a composable + // image extension under /run/kata-extensions//bin) fail with ENOENT. + // OCI semantics: run `path`, with `args` as argv (argv[0] = args[0]). + let mut exec = Exec::cmd(&self.executable) .args(&self.args[1..]) - .arg0(&self.executable) + .arg0(&self.args[0]) .env_clear() .env_extend( self.envs