]> granicus.if.org Git - strace/commitdiff
Implement memfd_create syscall decoding
authorDmitry V. Levin <ldv@altlinux.org>
Tue, 28 Jul 2015 23:03:41 +0000 (23:03 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 29 Jul 2015 09:18:26 +0000 (09:18 +0000)
* 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.

Makefile.am
linux/dummy.h
memfd_create.c [new file with mode: 0644]
pathtrace.c
tests/.gitignore
tests/Makefile.am
tests/memfd_create.c [new file with mode: 0644]
tests/memfd_create.expected [new file with mode: 0644]
tests/memfd_create.test [new file with mode: 0755]
xlat/memfd_create_flags.in [new file with mode: 0644]

index 6e723199eb34dfdaf240bbe783c0251a9769a4f3..32915a3e7298d2c688f49ae81717baa65c434b7a 100644 (file)
@@ -68,6 +68,7 @@ strace_SOURCES =      \
        loop.c          \
        lseek.c         \
        mem.c           \
+       memfd_create.c  \
        mknod.c         \
        mount.c         \
        mtd.c           \
index 4e9db9e50318828d56af0f5b6ba67a52097709de..1fc2d0b932a0b9259d5a15b391e0a884315f00b8 100644 (file)
@@ -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 (file)
index 0000000..fcd370f
--- /dev/null
@@ -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;
+}
index bfa2df06bab456e6f0728fe4ea48249243a7600e..3946782b2fc9c1470110712a8055c28169625dfa 100644 (file)
@@ -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:
index 3ea70db1c409954be442b240562f45d9f96d9c8a..6354c7a23712df97bfb60f1a6903d9f8d5f18b3a 100644 (file)
@@ -11,6 +11,7 @@ ip_mreq
 ipc_msg
 ipc_sem
 ipc_shm
+memfd_create
 mmap
 mmap64
 mmsg
index bd3f5cfc86dab8cd8bfa5a53d83911bcce0b1fa4..e56643cc22541e041c7d7c65bbd07b000a74e731 100644 (file)
@@ -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 (file)
index 0000000..6b983c3
--- /dev/null
@@ -0,0 +1,25 @@
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <unistd.h>
+#include <sys/syscall.h>
+
+#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 (file)
index 0000000..6fb938f
--- /dev/null
@@ -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 (executable)
index 0000000..6a34fc1
--- /dev/null
@@ -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 (file)
index 0000000..04a1b47
--- /dev/null
@@ -0,0 +1,2 @@
+MFD_CLOEXEC 1
+MFD_ALLOW_SEALING 2