Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753204AbcJKKnT (ORCPT ); Tue, 11 Oct 2016 06:43:19 -0400 Received: from mailapp02.imgtec.com ([217.156.133.132]:6680 "EHLO mailapp01.imgtec.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753151AbcJKKnR (ORCPT ); Tue, 11 Oct 2016 06:43:17 -0400 From: Marcin Nowakowski To: CC: , , , Marcin Nowakowski , Ingo Molnar , Catalin Marinas , Will Deacon , Subject: [PATCH v3 07/11] arm64/tracing: fix compat syscall handling Date: Tue, 11 Oct 2016 12:42:52 +0200 Message-ID: <1476182576-15247-8-git-send-email-marcin.nowakowski@imgtec.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1476182576-15247-1-git-send-email-marcin.nowakowski@imgtec.com> References: <1476182576-15247-1-git-send-email-marcin.nowakowski@imgtec.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.80.2.5] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3295 Lines: 91 Add arch_syscall_addr for arm64 and define NR_compat_syscalls, as the number of compat syscalls for arm64 exceeds the number defined by NR_syscalls. Signed-off-by: Marcin Nowakowski Cc: Steven Rostedt Cc: Ingo Molnar Cc: Catalin Marinas Cc: Will Deacon Cc: linux-arm-kernel@lists.infradead.org --- arch/arm64/include/asm/ftrace.h | 12 +----------- arch/arm64/include/asm/unistd.h | 1 + arch/arm64/kernel/Makefile | 1 + arch/arm64/kernel/ftrace.c | 16 ++++++++++++++++ 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/arch/arm64/include/asm/ftrace.h b/arch/arm64/include/asm/ftrace.h index caa955f..b57ff7c 100644 --- a/arch/arm64/include/asm/ftrace.h +++ b/arch/arm64/include/asm/ftrace.h @@ -41,17 +41,7 @@ static inline unsigned long ftrace_call_adjust(unsigned long addr) #define ftrace_return_address(n) return_address(n) -/* - * Because AArch32 mode does not share the same syscall table with AArch64, - * tracing compat syscalls may result in reporting bogus syscalls or even - * hang-up, so just do not trace them. - * See kernel/trace/trace_syscalls.c - * - * x86 code says: - * If the user really wants these, then they should use the - * raw syscall tracepoints with filtering. - */ -#define ARCH_TRACE_IGNORE_COMPAT_SYSCALLS +#define ARCH_COMPAT_SYSCALL_NUMBERS_OVERLAP 1 static inline bool arch_trace_is_compat_syscall(struct pt_regs *regs) { return is_compat_task(); diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h index e78ac26..276d049 100644 --- a/arch/arm64/include/asm/unistd.h +++ b/arch/arm64/include/asm/unistd.h @@ -45,6 +45,7 @@ #define __ARM_NR_compat_set_tls (__ARM_NR_COMPAT_BASE+5) #define __NR_compat_syscalls 394 +#define NR_compat_syscalls (__NR_compat_syscalls) #endif #define __ARCH_WANT_SYS_CLONE diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile index 7d66bba..7ea9cd3 100644 --- a/arch/arm64/kernel/Makefile +++ b/arch/arm64/kernel/Makefile @@ -30,6 +30,7 @@ $(obj)/%.stub.o: $(obj)/%.o FORCE arm64-obj-$(CONFIG_COMPAT) += sys32.o kuser32.o signal32.o \ sys_compat.o entry32.o arm64-obj-$(CONFIG_FUNCTION_TRACER) += ftrace.o entry-ftrace.o +arm64-obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o arm64-obj-$(CONFIG_MODULES) += arm64ksyms.o module.o arm64-obj-$(CONFIG_ARM64_MODULE_PLTS) += module-plts.o arm64-obj-$(CONFIG_PERF_EVENTS) += perf_regs.o perf_callchain.o diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c index 40ad08a..75d010f 100644 --- a/arch/arm64/kernel/ftrace.c +++ b/arch/arm64/kernel/ftrace.c @@ -176,4 +176,20 @@ int ftrace_disable_ftrace_graph_caller(void) return ftrace_modify_graph_caller(false); } #endif /* CONFIG_DYNAMIC_FTRACE */ + #endif /* CONFIG_FUNCTION_GRAPH_TRACER */ + +#if (defined CONFIG_FTRACE_SYSCALLS) && (defined CONFIG_COMPAT) + +extern const void *sys_call_table[]; +extern const void *compat_sys_call_table[]; + +unsigned long __init arch_syscall_addr(int nr, bool compat) +{ + if (compat) + return (unsigned long)compat_sys_call_table[nr]; + + return (unsigned long)sys_call_table[nr]; +} + +#endif /* CONFIG_FTRACE_SYSCALLS && CONFIG_COMPAT */ -- 2.7.4