Smol bugfixes
This commit is contained in:
parent
6830c8af28
commit
4aa887573d
|
@ -674,8 +674,8 @@ impl TracerClient {
|
||||||
e => e?,
|
e => e?,
|
||||||
};
|
};
|
||||||
let syscallno = syscall_no_from_regs!(regs);
|
let syscallno = syscall_no_from_regs!(regs);
|
||||||
|
log::trace!("Got syscall {} from {}", syscallno, pid);
|
||||||
p.syscall = syscallno;
|
p.syscall = syscallno;
|
||||||
// log::trace!("pre syscall: {syscallno}");
|
|
||||||
match syscallno {
|
match syscallno {
|
||||||
nix::libc::SYS_execveat => {
|
nix::libc::SYS_execveat => {
|
||||||
// int execveat(int dirfd, const char *pathname,
|
// 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<()> {
|
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)?;
|
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")) {
|
if args.get(1).is_some_and(|c| c.to_str() == Ok("run")) {
|
||||||
let new_machine = self.allocate_machine()?;
|
let new_machine = self.allocate_machine()?;
|
||||||
|
|
|
@ -16,6 +16,7 @@ pub fn instrument_docker_run_execve(
|
||||||
}
|
}
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct ArgsParsed<'a> {
|
struct ArgsParsed<'a> {
|
||||||
|
preamble: Vec<&'a str>,
|
||||||
args: Vec<Argument<'a>>,
|
args: Vec<Argument<'a>>,
|
||||||
image: Option<&'a str>,
|
image: Option<&'a str>,
|
||||||
cmd: Vec<&'a str>,
|
cmd: Vec<&'a str>,
|
||||||
|
@ -49,7 +50,7 @@ pub fn instrument_docker_run_execve(
|
||||||
}
|
}
|
||||||
|
|
||||||
fn reserialize(self) -> Vec<CString> {
|
fn reserialize(self) -> Vec<CString> {
|
||||||
let mut result = vec![];
|
let mut result = self.preamble.into_iter().map(|x| CString::new(x).unwrap()).collect::<Vec<_>>();
|
||||||
for arg in self.args {
|
for arg in self.args {
|
||||||
match arg {
|
match arg {
|
||||||
Argument::Zero(a) => result.push(CString::new(a).unwrap()),
|
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 string_args = ArgsParsed::default();
|
||||||
let mut args_iter = args.iter();
|
let mut args_iter = args.iter();
|
||||||
assert_eq!(args_iter.next().map(|x| x.to_str().unwrap()), Some("docker"));
|
string_args.preamble.push(args_iter.next().unwrap().to_str().unwrap());
|
||||||
assert_eq!(args_iter.next().map(|x| x.to_str().unwrap()), Some("run"));
|
string_args.preamble.push(args_iter.next().unwrap().to_str().unwrap());
|
||||||
while let Some(arg) = args_iter.next() {
|
while let Some(arg) = args_iter.next() {
|
||||||
let arg = arg.to_str()?;
|
let arg = arg.to_str()?;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue