[PATCH v3 08/11] powerpc/tracing: fix compat syscall handling

Subsystems: function hooks (ftrace), linux for powerpc (32-bit and 64-bit), the rest

STALE3602d

Revision v3 of 3 in this series.

3 messages, 2 authors, 2016-10-12 · open the first message on its own page

[PATCH v3 08/11] powerpc/tracing: fix compat syscall handling

From: Marcin Nowakowski <hidden>
Date: 2016-10-11 10:44:14

Adapt the code to make use of new syscall handling interface

Signed-off-by: Marcin Nowakowski <redacted>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <redacted>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: linuxppc-dev@lists.ozlabs.org
---
 arch/powerpc/include/asm/ftrace.h | 11 +++++++++++
 arch/powerpc/kernel/ftrace.c      |  4 ++++
 2 files changed, 15 insertions(+)
diff --git a/arch/powerpc/include/asm/ftrace.h b/arch/powerpc/include/asm/ftrace.h
index 9697a73..d2ea3b6 100644
--- a/arch/powerpc/include/asm/ftrace.h
+++ b/arch/powerpc/include/asm/ftrace.h
@@ -86,6 +86,17 @@ static inline bool arch_syscall_match_sym_name(const char *sym, const char *name
 	return !strcmp(sym + prefix_len + 1, name + prefix_len);
 }
 #endif
+
+#if defined(CONFIG_COMPAT)
+#include <linux/compat.h>
+#include <asm/compat.h>
+
+#define ARCH_COMPAT_SYSCALL_NUMBERS_OVERLAP 1
+static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs)
+{
+	return in_compat_syscall();
+}
+#endif /* CONFIG_COMPAT */
 #endif /* CONFIG_FTRACE_SYSCALLS && !__ASSEMBLY__ */
 
 #endif /* _ASM_POWERPC_FTRACE */
diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c
index 5bfb35f..12c00f7 100644
--- a/arch/powerpc/kernel/ftrace.c
+++ b/arch/powerpc/kernel/ftrace.c
@@ -606,6 +606,10 @@ unsigned long prepare_ftrace_return(unsigned long parent, unsigned long ip)
 #if defined(CONFIG_FTRACE_SYSCALLS) && defined(CONFIG_PPC64)
 unsigned long __init arch_syscall_addr(int nr, bool compat)
 {
+#ifdef CONFIG_COMPAT
+	if (compat)
+		return sys_call_table[nr*2+1];
+#endif
 	return sys_call_table[nr*2];
 }
 #endif /* CONFIG_FTRACE_SYSCALLS && CONFIG_PPC64 */
-- 
2.7.4

Re: [PATCH v3 08/11] powerpc/tracing: fix compat syscall handling

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2016-10-12 09:59:51

Marcin Nowakowski [off-list ref] writes:
Adapt the code to make use of new syscall handling interface

Signed-off-by: Marcin Nowakowski <redacted>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <redacted>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: linuxppc-dev@lists.ozlabs.org
---
 arch/powerpc/include/asm/ftrace.h | 11 +++++++++++
 arch/powerpc/kernel/ftrace.c      |  4 ++++
I went to test this and noticed the exit and enter events appear to be
reversed in time? (your series on top of 24532f768121)

  ls-4221  [003] ....    83.766113: compat_sys_rt_sigprocmask -> 0x2
  ls-4221  [003] ....    83.766137: compat_sys_rt_sigprocmask(how: 2, nset: 1010db30, oset: 0, sigsetsize: 8)
  ls-4221  [003] ....    83.766175: compat_sys_rt_sigaction -> 0x14
  ls-4221  [003] ....    83.766175: compat_sys_rt_sigaction(sig: 14, act: ffbd33c4, oact: ffbd3338, sigsetsize: 8)
  ls-4221  [003] ....    83.766177: compat_sys_rt_sigaction -> 0x15
  ls-4221  [003] ....    83.766177: compat_sys_rt_sigaction(sig: 15, act: ffbd33c4, oact: ffbd3338, sigsetsize: 8)
  ls-4221  [003] ....    83.766178: compat_sys_rt_sigaction -> 0x16
  ls-4221  [003] ....    83.766178: compat_sys_rt_sigaction(sig: 16, act: ffbd33d4, oact: ffbd3348, sigsetsize: 8)
  ls-4221  [003] ....    83.766179: sys_setpgid -> 0x107d
  ls-4221  [003] ....    83.766179: sys_setpgid(pid: 107d, pgid: 107d)
  ls-4221  [003] ....    83.766180: compat_sys_rt_sigprocmask -> 0x0
  ls-4221  [003] ....    83.766181: compat_sys_rt_sigprocmask(how: 0, nset: ffbd34b0, oset: ffbd3530, sigsetsize: 8)
  ls-4221  [003] ....    83.766186: compat_sys_ioctl -> 0xff
  ls-4221  [003] ....    83.766187: compat_sys_ioctl(fd: ff, cmd: 80047476, arg32: ffbd3488)
  ls-4221  [003] ....    83.766188: compat_sys_rt_sigprocmask -> 0x2
  ls-4221  [003] ....    83.766189: compat_sys_rt_sigprocmask(how: 2, nset: ffbd3530, oset: 0, sigsetsize: 8)
  ls-4221  [003] ....    83.766189: sys_close -> 0x4
  ls-4221  [003] ....    83.766190: sys_close(fd: 4)
  ls-4221  [003] ....    83.766191: sys_read -> 0x3
  ls-4221  [003] ....    83.766191: sys_read(fd: 3, buf: ffbd35dc, count: 1)
  ls-4221  [003] ....    83.766235: sys_close -> 0x3
  ls-4221  [003] ....    83.766235: sys_close(fd: 3)

cheers

Re: [PATCH v3 08/11] powerpc/tracing: fix compat syscall handling

From: Marcin Nowakowski <hidden>
Date: 2016-10-12 13:10:48


On 12.10.2016 11:59, Michael Ellerman wrote:
I went to test this and noticed the exit and enter events appear to be
reversed in time? (your series on top of 24532f768121)
thanks for testing the patch - I've found a bug that has sneaked in 
while cleaning up the patches before submission ... I'll fix it in the 
next iteration.

Marcin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help