From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933274AbbDKGjA (ORCPT ); Sat, 11 Apr 2015 02:39:00 -0400 Received: from terminus.zytor.com ([198.137.202.10]:51137 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933061AbbDKGij (ORCPT ); Sat, 11 Apr 2015 02:38:39 -0400 Date: Fri, 10 Apr 2015 23:38:08 -0700 From: tip-bot for Masami Hiramatsu Message-ID: Cc: jolsa@redhat.com, peterz@infradead.org, acme@redhat.com, hpa@zytor.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, dsahern@gmail.com, mingo@kernel.org, namhyung@kernel.org, masami.hiramatsu.pt@hitachi.com Reply-To: masami.hiramatsu.pt@hitachi.com, namhyung@kernel.org, mingo@kernel.org, hpa@zytor.com, dsahern@gmail.com, linux-kernel@vger.kernel.org, tglx@linutronix.de, acme@redhat.com, peterz@infradead.org, jolsa@redhat.com In-Reply-To: <20150401102541.17137.75477.stgit@localhost.localdomain> References: <20150401102541.17137.75477.stgit@localhost.localdomain> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf probe: Check the orphaned -x option Git-Commit-ID: 8cb0aa4c2db395b143cd5165586dc17677960002 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 8cb0aa4c2db395b143cd5165586dc17677960002 Gitweb: http://git.kernel.org/tip/8cb0aa4c2db395b143cd5165586dc17677960002 Author: Masami Hiramatsu AuthorDate: Wed, 1 Apr 2015 19:25:42 +0900 Committer: Arnaldo Carvalho de Melo CommitDate: Fri, 10 Apr 2015 10:21:30 -0300 perf probe: Check the orphaned -x option To avoid probing in unintended binary, the orphaned -x option must be checked and warned. Without this patch, following command sets up the probe in the kernel. ----- # perf probe -a strcpy -x ./perf Added new event: probe:strcpy (on strcpy) You can now use it in all perf tools, such as: perf record -e probe:strcpy -aR sleep 1 ----- But in this case, it seems that the user may want to probe in the perf binary. With this patch, perf-probe correctly handles the orphaned -x. ----- # perf probe -a strcpy -x ./perf Error: -x/-m must follow the probe definitions. ... ----- Reported-by: Jiri Olsa Acked-by: Jiri Olsa Cc: David Ahern Cc: Namhyung Kim Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/20150401102541.17137.75477.stgit@localhost.localdomain Signed-off-by: Masami Hiramatsu Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/builtin-probe.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tools/perf/builtin-probe.c b/tools/perf/builtin-probe.c index 2df23e1..f7b1af6 100644 --- a/tools/perf/builtin-probe.c +++ b/tools/perf/builtin-probe.c @@ -56,6 +56,7 @@ static struct { bool mod_events; bool uprobes; bool quiet; + bool target_used; int nevents; struct perf_probe_event events[MAX_PROBES]; struct strlist *dellist; @@ -82,6 +83,7 @@ static int parse_probe_event(const char *str) pev->target = strdup(params.target); if (!pev->target) return -ENOMEM; + params.target_used = true; } /* Parse a perf-probe command into event */ @@ -107,6 +109,7 @@ static int set_target(const char *ptr) params.target = strdup(ptr); if (!params.target) return -ENOMEM; + params.target_used = false; found = 1; buf = ptr + (strlen(ptr) - 3); @@ -207,6 +210,7 @@ static int opt_set_target(const struct option *opt, const char *str, } free(params.target); params.target = tmp; + params.target_used = false; ret = 0; } @@ -491,6 +495,12 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused) } if (params.nevents) { + /* Ensure the last given target is used */ + if (params.target && !params.target_used) { + pr_warning(" Error: -x/-m must follow the probe definitions.\n"); + usage_with_options(probe_usage, options); + } + ret = add_perf_probe_events(params.events, params.nevents, params.max_probe_points, params.force_add);