]> granicus.if.org Git - strace/commitdiff
Implement kexec_file_load syscall decoding
authorDmitry V. Levin <ldv@altlinux.org>
Sun, 22 Nov 2015 18:51:05 +0000 (18:51 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 22 Nov 2015 23:10:12 +0000 (23:10 +0000)
* 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.

kexec.c
linux/dummy.h
pathtrace.c
xlat/kexec_file_load_flags.in [new file with mode: 0644]

diff --git a/kexec.c b/kexec.c
index 2cfe1381ca92f0f75544fe8631dc29a6c6d173c3..a920b42eb17de0f29c4601be234b52b5530decee 100644 (file)
--- 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;
+}
index e994745744da2aef3340c779082c6d0640cda882..238d72c02495c57298fd916765d387886a82c373 100644 (file)
@@ -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
index e89984de655f4d877ea476e6a66859939df8b34d..663f3b4b7220c349def577eec6bdb4bcf039a03b 100644 (file)
@@ -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 (file)
index 0000000..3ca7552
--- /dev/null
@@ -0,0 +1,3 @@
+KEXEC_FILE_UNLOAD      1
+KEXEC_FILE_ON_CRASH    2
+KEXEC_FILE_NO_INITRAMFS        4