diff --git a/src/tracer/client.rs b/src/tracer/client.rs index 311a163..b0f5474 100644 --- a/src/tracer/client.rs +++ b/src/tracer/client.rs @@ -674,8 +674,8 @@ impl TracerClient { e => e?, }; let syscallno = syscall_no_from_regs!(regs); + log::trace!("Got syscall {} from {}", syscallno, pid); p.syscall = syscallno; - // log::trace!("pre syscall: {syscallno}"); match syscallno { nix::libc::SYS_execveat => { // int execveat(int dirfd, const char *pathname, @@ -858,7 +858,7 @@ impl TracerClient { } fn instrument_exec(&mut self, pid: Pid, filename: &str, regs: &user_regs_struct, prog_idx: usize) -> anyhow::Result<()> { - if let Some(new_args) = if filename.ends_with("/docker") { + if let Some(new_args) = if filename.ends_with("/docker") && std::fs::metadata(&filename).is_ok() { let mut args = read_cstring_array(pid, syscall_arg(®s, prog_idx + 1) as AddressType)?; if args.get(1).is_some_and(|c| c.to_str() == Ok("run")) { let new_machine = self.allocate_machine()?; diff --git a/src/tracer/docker.rs b/src/tracer/docker.rs index 6e56b8f..fc93fd1 100644 --- a/src/tracer/docker.rs +++ b/src/tracer/docker.rs @@ -16,6 +16,7 @@ pub fn instrument_docker_run_execve( } #[derive(Default)] struct ArgsParsed<'a> { + preamble: Vec<&'a str>, args: Vec>, image: Option<&'a str>, cmd: Vec<&'a str>, @@ -49,7 +50,7 @@ pub fn instrument_docker_run_execve( } fn reserialize(self) -> Vec { - let mut result = vec![]; + let mut result = self.preamble.into_iter().map(|x| CString::new(x).unwrap()).collect::>(); for arg in self.args { match arg { Argument::Zero(a) => result.push(CString::new(a).unwrap()), @@ -91,8 +92,8 @@ pub fn instrument_docker_run_execve( ]); let mut string_args = ArgsParsed::default(); let mut args_iter = args.iter(); - assert_eq!(args_iter.next().map(|x| x.to_str().unwrap()), Some("docker")); - assert_eq!(args_iter.next().map(|x| x.to_str().unwrap()), Some("run")); + string_args.preamble.push(args_iter.next().unwrap().to_str().unwrap()); + string_args.preamble.push(args_iter.next().unwrap().to_str().unwrap()); while let Some(arg) = args_iter.next() { let arg = arg.to_str()?;