[PATCH] pathtrace: Fix fanotify_mark path tracing on 32-bit architectures

Nikolay Marchuk marchuk.nikolay.a at gmail.com
Sun Jul 23 04:44:36 UTC 2017


The fanotify_mark syscall takes a 64-bit mask, and on 32-bit
architectures it is split up into two syscall arguments.

* pathtrace.c (pathtrace_match_set): Use getllval to properly decode arguments
after mask.
---
 pathtrace.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/pathtrace.c b/pathtrace.c
index 9f3674a..26a52fe 100644
--- a/pathtrace.c
+++ b/pathtrace.c
@@ -241,10 +241,13 @@ pathtrace_match_set(struct tcb *tcp, struct path_set *set)
 
 
 	case SEN_fanotify_mark:
-		/* x, x, x, fd, path */
-		return fdmatch(tcp, tcp->u_arg[3], set) ||
-			upathmatch(tcp, tcp->u_arg[4], set);
-
+	{
+		/* x, x, mask (64 bit), fd, path */
+		unsigned long long mask = 0;
+		int argn = getllval(tcp, &mask, 2);
+		return fdmatch(tcp, tcp->u_arg[argn], set) ||
+			upathmatch(tcp, tcp->u_arg[argn + 1], set);
+	}
 	case SEN_oldselect:
 	case SEN_pselect6:
 	case SEN_select:
-- 
2.1.4





More information about the Strace-devel mailing list