perf trace: Pretty print seccomp() args
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 997bba8cf1875d9715e792c445e1a9c7a4c365e2 Gitweb: http://git.kernel.org/tip/997bba8cf1875d9715e792c445e1a9c7a4c365e2 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Wed, 30 Mar 2016 19:43:32 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 31 Mar 2016 10:42:22 -0300
perf trace: Pretty print seccomp() args
E.g:
# trace -e seccomp 200.061 (0.009 ms): :2441/2441 seccomp(op: FILTER, flags: TSYNC ) = -1 EFAULT Bad address 200.910 (0.121 ms): :2441/2441 seccomp(op: FILTER, flags: TSYNC, uargs: 0x7fff57479fe0) = 0
Cc Adrian Hunter <[email protected]>
Cc David Ahern <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Milian Wolff <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-trace.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+)
tools/perf/builtin-trace.c +47 -0
@@ -40,6 +40,10 @@#include <sys/mman.h> #include <linux/futex.h> #include <linux/err.h> +#include <linux/seccomp.h> +#include <linux/filter.h> +#include <linux/audit.h> +#include <sys/ptrace.h> /* For older distros: */ #ifndef MAP_STACK
@@ -1001,6 +1005,46 @@ static const char *tioctls[] = { static DEFINE_STRARRAY_OFFSET(tioctls, 0x5401);#endif /* defined(__i386__) || defined(__x86_64__) */ +static size_t syscall_arg__scnprintf_seccomp_op (char *bf,size_t size,struct syscall_arg *arg) +{ +int op = arg->val; +size_t printed =0 ; + +switch (op) { +#define P_SECCOMP_SET_MODE_OP (n) case SECCOMP_SET_MODE_##n: printed = scnprintf(bf, size, #n); break +P_SECCOMP_SET_MODE_OP (STRICT ); +P_SECCOMP_SET_MODE_OP (FILTER ); +#undef P_SECCOMP_SET_MODE_OP +default : printed =scnprintf (bf, size,"%#x" , op);break ; + } + +return printed; +} + +#define SCA_SECCOMP_OP syscall_arg__scnprintf_seccomp_op + +static size_t syscall_arg__scnprintf_seccomp_flags (char *bf,size_t size, +struct syscall_arg *arg) +{ +int printed =0 , flags = arg->val; + +#define P_FLAG (n) \ + if (flags & SECCOMP_FILTER_FLAG_##n) { \ + printed += scnprintf(bf + printed, size - printed, "%s%s", printed ? "|" : "", #n); \ + flags &= ~SECCOMP_FILTER_FLAG_##n; \ + } + +P_FLAG (TSYNC ); +#undef P_FLAG + +if (flags) + printed +=scnprintf (bf + printed, size - printed,"%s%#x" , printed ?"|" :"" , flags); + +return printed; +} + +#define SCA_SECCOMP_FLAGS syscall_arg__scnprintf_seccomp_flags +#define STRARRAY (arg, name, array) \ .arg_scnprintf = { [arg] = SCA_STRARRAY, }, \ .arg_parm = { [arg] = &strarray__##array, }
@@ -1234,6 +1278,9 @@ static struct syscall_fmt { .arg_scnprintf = { [1] = SCA_SIGNUM, /* sig */ }, }, { .name = "rt_tgsigqueueinfo", .errmsg = true, .arg_scnprintf = { [2] = SCA_SIGNUM, /* sig */ }, }, + { .name = "seccomp", .errmsg = true, + .arg_scnprintf = { [0] = SCA_SECCOMP_OP, /* op */ + [1] = SCA_SECCOMP_FLAGS, /* flags */ }, }, { .name = "select", .errmsg = true, .timeout = true, }, { .name = "sendmmsg", .errmsg = true, .arg_scnprintf = { [0] = SCA_FD, /* fd */