From: Dmitry V. Levin Date: Tue, 28 Jul 2015 23:03:41 +0000 (+0000) Subject: Implement memfd_create syscall decoding X-Git-Tag: v4.11~321 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=95b84ea641e724dff6e0f9b7d66a8a00b75c196a;p=strace Implement memfd_create syscall decoding * memfd_create.c: New file. * Makefile.am (strace_SOURCES): Add it. * linux/dummy.h (sys_memfd_create): Remove. * pathtrace.c (pathtrace_match): Add SEN_memfd_create. * xlat/memfd_create_flags.in: New file. * tests/memfd_create.c: New file. * tests/memfd_create.expected: Likewise. * tests/memfd_create.test: New test. * tests/Makefile.am: (check_PROGRAMS): Add memfd_create. (TESTS): Add memfd_create.test. (EXTRA_DIST): Add memfd_create.expected. * tests/.gitignore: Add memfd_create. --- diff --git a/Makefile.am b/Makefile.am index 6e723199..32915a3e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -68,6 +68,7 @@ strace_SOURCES = \ loop.c \ lseek.c \ mem.c \ + memfd_create.c \ mknod.c \ mount.c \ mtd.c \ diff --git a/linux/dummy.h b/linux/dummy.h index 4e9db9e5..1fc2d0b9 100644 --- a/linux/dummy.h +++ b/linux/dummy.h @@ -37,7 +37,6 @@ #define sys_kcmp printargs #define sys_kexec_file_load printargs #define sys_lookup_dcookie printargs -#define sys_memfd_create printargs #define sys_name_to_handle_at printargs #define sys_open_by_handle_at printargs #define sys_sched_getattr printargs diff --git a/memfd_create.c b/memfd_create.c new file mode 100644 index 00000000..fcd370f8 --- /dev/null +++ b/memfd_create.c @@ -0,0 +1,12 @@ +#include "defs.h" + +#include "xlat/memfd_create_flags.h" + +SYS_FUNC(memfd_create) +{ + printstr(tcp, tcp->u_arg[0], -1); + tprints(", "); + printflags(memfd_create_flags, tcp->u_arg[1], "MFD_???"); + + return RVAL_DECODED | RVAL_FD; +} diff --git a/pathtrace.c b/pathtrace.c index bfa2df06..3946782b 100644 --- a/pathtrace.c +++ b/pathtrace.c @@ -324,6 +324,7 @@ pathtrace_match(struct tcb *tcp) case SEN_eventfd: case SEN_fanotify_init: case SEN_inotify_init1: + case SEN_memfd_create: case SEN_perf_event_open: case SEN_pipe: case SEN_printargs: diff --git a/tests/.gitignore b/tests/.gitignore index 3ea70db1..6354c7a2 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -11,6 +11,7 @@ ip_mreq ipc_msg ipc_sem ipc_shm +memfd_create mmap mmap64 mmsg diff --git a/tests/Makefile.am b/tests/Makefile.am index bd3f5cfc..e56643cc 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -22,6 +22,7 @@ check_PROGRAMS = \ ipc_msg \ ipc_sem \ ipc_shm \ + memfd_create \ mmap \ mmap64 \ mmsg \ @@ -88,6 +89,7 @@ TESTS = \ stat32-v.test \ stat64-v.test \ statfs.test \ + memfd_create.test \ mmap.test \ mmap64.test \ mmsg.test \ @@ -133,6 +135,7 @@ EXTRA_DIST = init.sh run.sh match.awk \ ioctl.expected \ ip_mreq.expected \ ipc.sh \ + memfd_create.expected \ mmsg.expected \ net.expected \ net-fd.expected \ diff --git a/tests/memfd_create.c b/tests/memfd_create.c new file mode 100644 index 00000000..6b983c37 --- /dev/null +++ b/tests/memfd_create.c @@ -0,0 +1,25 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#ifdef __NR_memfd_create + +int +main(void) +{ + syscall(__NR_memfd_create, "strace", 7); + return 0; +} + +#else + +int +main(void) +{ + return 77; +} + +#endif diff --git a/tests/memfd_create.expected b/tests/memfd_create.expected new file mode 100644 index 00000000..6fb938fd --- /dev/null +++ b/tests/memfd_create.expected @@ -0,0 +1 @@ +memfd_create\("strace", MFD_CLOEXEC\|MFD_ALLOW_SEALING\|0x4\) += -1 .* diff --git a/tests/memfd_create.test b/tests/memfd_create.test new file mode 100755 index 00000000..6a34fc13 --- /dev/null +++ b/tests/memfd_create.test @@ -0,0 +1,11 @@ +#!/bin/sh + +# Check memfd_create syscall decoding. + +. "${srcdir=.}/init.sh" + +run_prog +run_strace -e memfd_create $args +match_grep + +exit 0 diff --git a/xlat/memfd_create_flags.in b/xlat/memfd_create_flags.in new file mode 100644 index 00000000..04a1b47a --- /dev/null +++ b/xlat/memfd_create_flags.in @@ -0,0 +1,2 @@ +MFD_CLOEXEC 1 +MFD_ALLOW_SEALING 2