From: Eugene Syromyatnikov Date: Tue, 4 Sep 2018 12:48:13 +0000 (+0200) Subject: syscall.c: avoid infinite loop in subcalls parsing X-Git-Tag: v5.2~21 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=522ad3a0e73148dadd2480cd9cec84d9112b2e57;p=strace syscall.c: avoid infinite loop in subcalls parsing clang complains about it, so it might be a good reason to refactor it into something more linear. * syscall.c (syscall_entering_decode): Put syscall subcall decoding before ipc/socket subcall decoding, remove the loop. --- diff --git a/syscall.c b/syscall.c index bae7343c..a67d7442 100644 --- a/syscall.c +++ b/syscall.c @@ -579,11 +579,13 @@ syscall_entering_decode(struct tcb *tcp) return res; } +# ifdef SYS_syscall_subcall + if (tcp_sysent(tcp)->sen == SEN_syscall) + decode_syscall_subcall(tcp); +# endif #if defined SYS_ipc_subcall \ - || defined SYS_socket_subcall \ - || defined SYS_syscall_subcall - for (;;) { - switch (tcp_sysent(tcp)->sen) { + || defined SYS_socket_subcall + switch (tcp_sysent(tcp)->sen) { # ifdef SYS_ipc_subcall case SEN_ipc: decode_ipc_subcall(tcp); @@ -594,15 +596,6 @@ syscall_entering_decode(struct tcb *tcp) decode_socket_subcall(tcp); break; # endif -# ifdef SYS_syscall_subcall - case SEN_syscall: - decode_syscall_subcall(tcp); - if (tcp_sysent(tcp)->sen != SEN_syscall) - continue; - break; -# endif - } - break; } #endif