From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from e23smtp03.au.ibm.com (e23smtp03.au.ibm.com [202.81.31.145]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "e23smtp03.au.ibm.com", Issuer "GeoTrust SSL CA" (verified OK)) by ozlabs.org (Postfix) with ESMTPS id 5401EB7113 for ; Thu, 3 Feb 2011 14:27:42 +1100 (EST) Received: from d23relay05.au.ibm.com (d23relay05.au.ibm.com [202.81.31.247]) by e23smtp03.au.ibm.com (8.14.4/8.13.1) with ESMTP id p133NEre014583 for ; Thu, 3 Feb 2011 14:23:14 +1100 Received: from d23av01.au.ibm.com (d23av01.au.ibm.com [9.190.234.96]) by d23relay05.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p133RfSf2523274 for ; Thu, 3 Feb 2011 14:27:41 +1100 Received: from d23av01.au.ibm.com (loopback [127.0.0.1]) by d23av01.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p133Rde1018155 for ; Thu, 3 Feb 2011 14:27:41 +1100 From: "Ian Munsie" To: linux-kernel@vger.kernel.org Subject: [PATCH 1/6] ftrace syscalls: don't add events for unmapped syscalls Date: Thu, 3 Feb 2011 14:27:20 +1100 Message-Id: <1296703645-18718-2-git-send-email-imunsie@au1.ibm.com> In-Reply-To: <1296703645-18718-1-git-send-email-imunsie@au1.ibm.com> References: <1296703645-18718-1-git-send-email-imunsie@au1.ibm.com> Cc: Andreas Dilger , Andreas Schwab , Dave Kleikamp , Namhyung Kim , Jiri Kosina , Jason Baron , Alexander Graf , Steven Rostedt , David Gibson , Ingo Molnar , Paul Mackerras , Ian Munsie , KOSAKI Motohiro , Frederic Weisbecker , Scott Wood , Nathan Lynch , Andrew Morton , linuxppc-dev , Avantika Mathur List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Ian Munsie FTRACE_SYSCALLS would create events for each and every system call, even if it had failed to map the system call's name with it's number. This resulted in a number of events being created that would not behave as expected. This could happen, for example, on architectures who's symbol names are unusual and will not match the system call name. It could also happen with system calls which were mapped to sys_ni_syscall. This patch changes the default system call number in the metadata to -1. If the system call name from the metadata is not successfully mapped to a system call number during boot, than the event initialisation routine will now return an error, preventing the event from being created. Signed-off-by: Ian Munsie --- include/linux/syscalls.h | 2 ++ kernel/trace/trace_syscalls.c | 8 ++++++++ 2 files changed, 10 insertions(+), 0 deletions(-) diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 18cd068..2e5a68d 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -160,6 +160,7 @@ extern struct trace_event_functions exit_syscall_print_funcs; __attribute__((section("__syscalls_metadata"))) \ __syscall_meta_##sname = { \ .name = "sys"#sname, \ + .syscall_nr = -1, /* Filled in at boot */ \ .nb_args = nb, \ .types = types_##sname, \ .args = args_##sname, \ @@ -176,6 +177,7 @@ extern struct trace_event_functions exit_syscall_print_funcs; __attribute__((section("__syscalls_metadata"))) \ __syscall_meta__##sname = { \ .name = "sys_"#sname, \ + .syscall_nr = -1, /* Filled in at boot */ \ .nb_args = 0, \ .enter_event = &event_enter__##sname, \ .exit_event = &event_exit__##sname, \ diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c index b706529..a66bc13 100644 --- a/kernel/trace/trace_syscalls.c +++ b/kernel/trace/trace_syscalls.c @@ -423,6 +423,14 @@ void unreg_event_syscall_exit(struct ftrace_event_call *call) int init_syscall_trace(struct ftrace_event_call *call) { int id; + int num; + + num = ((struct syscall_metadata *)call->data)->syscall_nr; + if (num < 0 || num >= NR_syscalls) { + pr_debug("syscall %s metadata not mapped, disabling ftrace event\n", + ((struct syscall_metadata *)call->data)->name); + return -ENOSYS; + } if (set_syscall_print_fmt(call) < 0) return -ENOMEM; -- 1.7.2.3