From: Mike Frysinger Date: Thu, 14 Aug 2014 08:05:41 +0000 (-0400) Subject: renameat2: add decoding support X-Git-Tag: v4.9~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5b677ab904f4ab8b272fdc78b2b9e8321412392d;p=strace renameat2: add decoding support * file.c (decode_renameat, sys_renameat2): New functions. (sys_renameat): Use decode_renameat. * pathtrace.c (pathtrace_match): Handle sys_renameat2. * linux/syscall.h (sys_renameat2): New prototype. * xlat/rename_flags.in: New file. --- diff --git a/file.c b/file.c index 360408f3..986f4465 100644 --- a/file.c +++ b/file.c @@ -1767,15 +1767,34 @@ sys_readlinkat(struct tcb *tcp) return decode_readlink(tcp, 1); } +static void +decode_renameat(struct tcb *tcp) +{ + print_dirfd(tcp, tcp->u_arg[0]); + printpath(tcp, tcp->u_arg[1]); + tprints(", "); + print_dirfd(tcp, tcp->u_arg[2]); + printpath(tcp, tcp->u_arg[3]); +} + int sys_renameat(struct tcb *tcp) { if (entering(tcp)) { - print_dirfd(tcp, tcp->u_arg[0]); - printpath(tcp, tcp->u_arg[1]); + decode_renameat(tcp); + } + return 0; +} + +#include "xlat/rename_flags.h" + +int +sys_renameat2(struct tcb *tcp) +{ + if (entering(tcp)) { + decode_renameat(tcp); tprints(", "); - print_dirfd(tcp, tcp->u_arg[2]); - printpath(tcp, tcp->u_arg[3]); + printflags(rename_flags, tcp->u_arg[4], "RENAME_??"); } return 0; } diff --git a/linux/syscall.h b/linux/syscall.h index 38aa4bd7..0e695989 100644 --- a/linux/syscall.h +++ b/linux/syscall.h @@ -207,6 +207,7 @@ int sys_recvmsg(); int sys_remap_file_pages(); int sys_removexattr(); int sys_renameat(); +int sys_renameat2(); int sys_request_key(); int sys_restart_syscall(); int sys_rt_sigaction(); diff --git a/pathtrace.c b/pathtrace.c index 9fb99c42..ccfb3c27 100644 --- a/pathtrace.c +++ b/pathtrace.c @@ -211,6 +211,7 @@ pathtrace_match(struct tcb *tcp) } if (s->sys_func == sys_renameat || + s->sys_func == sys_renameat2 || s->sys_func == sys_linkat) { /* fd, path, fd, path */ diff --git a/xlat/rename_flags.in b/xlat/rename_flags.in new file mode 100644 index 00000000..324bdeda --- /dev/null +++ b/xlat/rename_flags.in @@ -0,0 +1,2 @@ +RENAME_NOREPLACE +RENAME_EXCHANGE