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.
This commit is contained in:
parent
67c4d437ba
commit
5b677ab904
27
file.c
27
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;
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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 */
|
||||
|
2
xlat/rename_flags.in
Normal file
2
xlat/rename_flags.in
Normal file
@ -0,0 +1,2 @@
|
||||
RENAME_NOREPLACE
|
||||
RENAME_EXCHANGE
|
Loading…
x
Reference in New Issue
Block a user