]> granicus.if.org Git - strace/blobdiff - pathtrace.c
Change last parameter of umoven() from char* to void*
[strace] / pathtrace.c
index f6c3b80f72e3fcf3c97253d36276c30be58a40a5..0db7fe31d9a31e9e666223bbaecbf2faadfc9530 100644 (file)
@@ -181,7 +181,6 @@ pathtrace_match(struct tcb *tcp)
            s->sys_func == sys_faccessat ||
            s->sys_func == sys_fchmodat ||
            s->sys_func == sys_futimesat ||
-           s->sys_func == sys_mkdirat ||
            s->sys_func == sys_unlinkat ||
            s->sys_func == sys_newfstatat ||
            s->sys_func == sys_mknodat ||
@@ -211,6 +210,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 */
@@ -251,6 +251,12 @@ pathtrace_match(struct tcb *tcp)
                return fdmatch(tcp, tcp->u_arg[2]);
        }
 
+       if (s->sys_func == sys_fanotify_mark) {
+               /* x, x, x, fd, path */
+               return fdmatch(tcp, tcp->u_arg[3]) ||
+                       upathmatch(tcp, tcp->u_arg[4]);
+       }
+
        if (s->sys_func == sys_select ||
            s->sys_func == sys_oldselect ||
            s->sys_func == sys_pselect6)
@@ -264,7 +270,7 @@ pathtrace_match(struct tcb *tcp)
                args = tcp->u_arg;
                if (s->sys_func == sys_oldselect) {
                        if (umoven(tcp, tcp->u_arg[0], sizeof oldargs,
-                                  (char*) oldargs) < 0)
+                                  oldargs) < 0)
                        {
                                fprintf(stderr, "umoven() failed\n");
                                return 0;
@@ -288,7 +294,7 @@ pathtrace_match(struct tcb *tcp)
                for (i = 1; i <= 3; ++i) {
                        if (args[i] == 0)
                                continue;
-                       if (umoven(tcp, args[i], fdsize, (char *) fds) < 0) {
+                       if (umoven(tcp, args[i], fdsize, fds) < 0) {
                                fprintf(stderr, "umoven() failed\n");
                                continue;
                        }
@@ -322,7 +328,7 @@ pathtrace_match(struct tcb *tcp)
                        return 0;
 
                for (cur = start; cur < end; cur += sizeof(fds))
-                       if ((umoven(tcp, cur, sizeof fds, (char *) &fds) == 0)
+                       if ((umoven(tcp, cur, sizeof fds, &fds) == 0)
                            && fdmatch(tcp, fds.fd))
                                return 1;
 
@@ -341,7 +347,7 @@ pathtrace_match(struct tcb *tcp)
            s->sys_func == sys_epoll_create ||
            s->sys_func == sys_socket ||
            s->sys_func == sys_socketpair ||
-           strcmp(s->sys_name, "fanotify_init") == 0)
+           s->sys_func == sys_fanotify_init)
        {
                /*
                 * These have TRACE_FILE or TRACE_DESCRIPTOR or TRACE_NETWORK set,