]> granicus.if.org Git - strace/commitdiff
Fix old_value argument retrieval in timerfd_settime parser
authorEugene Syromyatnikov <evgsyr@gmail.com>
Mon, 22 Aug 2016 08:51:16 +0000 (11:51 +0300)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 22 Aug 2016 09:32:47 +0000 (09:32 +0000)
This is done similar to timer_settime syscall parser.

* time.c (SYS_FUNC(timerfd_settime)): Retrieve old_value argument
on exiting and not on entering.  Return 0 instead of RVAL_DECODED
since the call hasn't been decoded in full on entering.

time.c

diff --git a/time.c b/time.c
index 963d0ea2a9de3097c6c321855e468a737ce1bf84..b32eddf63562e184d2f65d13f0ee0ff82e6febef 100644 (file)
--- a/time.c
+++ b/time.c
@@ -314,15 +314,17 @@ SYS_FUNC(timerfd_create)
 
 SYS_FUNC(timerfd_settime)
 {
-       printfd(tcp, tcp->u_arg[0]);
-       tprints(", ");
-       printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
-       tprints(", ");
-       print_itimerspec(tcp, tcp->u_arg[2]);
-       tprints(", ");
-       print_itimerspec(tcp, tcp->u_arg[3]);
-
-       return RVAL_DECODED;
+       if (entering(tcp)) {
+               printfd(tcp, tcp->u_arg[0]);
+               tprints(", ");
+               printflags(timerfdflags, tcp->u_arg[1], "TFD_???");
+               tprints(", ");
+               print_itimerspec(tcp, tcp->u_arg[2]);
+               tprints(", ");
+       } else {
+               print_itimerspec(tcp, tcp->u_arg[3]);
+       }
+       return 0;
 }
 
 SYS_FUNC(timerfd_gettime)