From: Dmitry V. Levin Date: Sun, 22 Nov 2015 18:51:05 +0000 (+0000) Subject: Implement kexec_file_load syscall decoding X-Git-Tag: v4.11~123 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ea1970500ed1b5a1888de3ff6347471c822182fa;p=strace Implement kexec_file_load syscall decoding * xlat/kexec_file_load_flags.in: New file. * kexec.c: Include "xlat/kexec_file_load_flags.h". (SYS_FUNC(kexec_file_load)): New function. * linux/dummy.h (sys_kexec_file_load): Remove stub alias. * pathtrace.c (pathtrace_match): Add SEN_kexec_file_load. --- diff --git a/kexec.c b/kexec.c index 2cfe1381..a920b42e 100644 --- a/kexec.c +++ b/kexec.c @@ -79,3 +79,24 @@ SYS_FUNC(kexec_load) return RVAL_DECODED; } + +#include "xlat/kexec_file_load_flags.h" + +SYS_FUNC(kexec_file_load) +{ + /* kernel_fd */ + printfd(tcp, tcp->u_arg[0]); + tprints(", "); + /* initrd_fd */ + printfd(tcp, tcp->u_arg[1]); + tprints(", "); + /* cmdline_len */ + tprintf("%lu, ", tcp->u_arg[2]); + /* cmdline */ + printstr(tcp, tcp->u_arg[3], tcp->u_arg[2]); + tprints(", "); + /* flags */ + printflags(kexec_file_load_flags, tcp->u_arg[4], "KEXEC_FILE_???"); + + return RVAL_DECODED; +} diff --git a/linux/dummy.h b/linux/dummy.h index e9947457..238d72c0 100644 --- a/linux/dummy.h +++ b/linux/dummy.h @@ -32,7 +32,6 @@ #endif /* still unfinished */ -#define sys_kexec_file_load printargs #define sys_lookup_dcookie printargs #define sys_name_to_handle_at printargs #define sys_open_by_handle_at printargs diff --git a/pathtrace.c b/pathtrace.c index e89984de..663f3b4b 100644 --- a/pathtrace.c +++ b/pathtrace.c @@ -163,6 +163,7 @@ pathtrace_match(struct tcb *tcp) switch (s->sen) { case SEN_dup2: case SEN_dup3: + case SEN_kexec_file_load: case SEN_sendfile: case SEN_sendfile64: case SEN_tee: diff --git a/xlat/kexec_file_load_flags.in b/xlat/kexec_file_load_flags.in new file mode 100644 index 00000000..3ca75529 --- /dev/null +++ b/xlat/kexec_file_load_flags.in @@ -0,0 +1,3 @@ +KEXEC_FILE_UNLOAD 1 +KEXEC_FILE_ON_CRASH 2 +KEXEC_FILE_NO_INITRAMFS 4