lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <1464056944-166978-8-git-send-email-wangnan0@huawei.com> Date: Tue, 24 May 2016 02:29:04 +0000 From: Wang Nan <wangnan0@...wei.com> To: <acme@...nel.org> CC: <pi3orama@....com>, <linux-kernel@...r.kernel.org>, Wang Nan <wangnan0@...wei.com>, He Kuang <hekuang@...wei.com>, "Arnaldo Carvalho de Melo" <acme@...hat.com>, Jiri Olsa <jolsa@...nel.org>, Masami Hiramatsu <masami.hiramatsu.pt@...achi.com>, Namhyung Kim <namhyung@...nel.org>, "Zefan Li" <lizefan@...wei.com> Subject: [PATCH v4 7/7] perf tools: Check write_backward during evlist config Before this patch, when using overwritable ring buffer on an old kernel, error message is misleading: # ~/perf record -m 1 -e raw_syscalls:*/overwrite/ -a Error: The raw_syscalls:sys_enter event is not supported. This patch output clear error message to tell user his/her kernel is too old: # ~/perf record -m 1 -e raw_syscalls:*/overwrite/ -a Reading from overwrite event is not supported by this kernel Error: The raw_syscalls:sys_enter event is not supported. Signed-off-by: Wang Nan <wangnan0@...wei.com> Cc: He Kuang <hekuang@...wei.com> Cc: Arnaldo Carvalho de Melo <acme@...hat.com> Cc: Jiri Olsa <jolsa@...nel.org> Cc: Masami Hiramatsu <masami.hiramatsu.pt@...achi.com> Cc: Namhyung Kim <namhyung@...nel.org> Cc: Zefan Li <lizefan@...wei.com> Cc: pi3orama@....com --- tools/perf/util/evsel.c | 17 +++++------------ tools/perf/util/evsel.h | 13 +++++++++++++ tools/perf/util/record.c | 17 +++++++++++++++++ 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c index 6330a4f..994310f 100644 --- a/tools/perf/util/evsel.c +++ b/tools/perf/util/evsel.c @@ -29,17 +29,7 @@ #include "trace-event.h" #include "stat.h" -static struct { - bool sample_id_all; - bool exclude_guest; - bool mmap2; - bool cloexec; - bool clockid; - bool clockid_wrong; - bool lbr_flags; - bool write_backward; -} perf_missing_features; - +struct perf_missing_features perf_missing_features; static clockid_t clockid; static int perf_evsel__no_extra_init(struct perf_evsel *evsel __maybe_unused) @@ -684,8 +674,11 @@ static void apply_config_terms(struct perf_evsel *evsel, * possible to set overwrite globally, without config * terms. */ - if (evsel->overwrite) + if (evsel->overwrite) { + WARN_ONCE(perf_missing_features.write_backward, + "Reading from overwrite event is not supported by this kernel\n"); attr->write_backward = 1; + } /* User explicitly set per-event callgraph, clear the old setting and reset. */ if ((callgraph_buf != NULL) || (dump_size > 0)) { diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h index bce99fa..c9b6716 100644 --- a/tools/perf/util/evsel.h +++ b/tools/perf/util/evsel.h @@ -11,6 +11,19 @@ #include "cpumap.h" #include "counts.h" +struct perf_missing_features { + bool sample_id_all; + bool exclude_guest; + bool mmap2; + bool cloexec; + bool clockid; + bool clockid_wrong; + bool lbr_flags; + bool write_backward; +}; + +extern struct perf_missing_features perf_missing_features; + struct perf_evsel; /* diff --git a/tools/perf/util/record.c b/tools/perf/util/record.c index 481792c..e3ab812 100644 --- a/tools/perf/util/record.c +++ b/tools/perf/util/record.c @@ -90,6 +90,11 @@ static void perf_probe_context_switch(struct perf_evsel *evsel) evsel->attr.context_switch = 1; } +static void perf_probe_write_backward(struct perf_evsel *evsel) +{ + evsel->attr.write_backward = 1; +} + bool perf_can_sample_identifier(void) { return perf_probe_api(perf_probe_sample_identifier); @@ -129,6 +134,17 @@ bool perf_can_record_cpu_wide(void) return true; } +static void perf_check_write_backward(void) +{ + static bool checked = false; + + if (!checked) { + perf_missing_features.write_backward = + !perf_probe_api(perf_probe_write_backward); + checked = true; + } +} + void perf_evlist__config(struct perf_evlist *evlist, struct record_opts *opts, struct callchain_param *callchain) { @@ -136,6 +152,7 @@ void perf_evlist__config(struct perf_evlist *evlist, struct record_opts *opts, bool use_sample_identifier = false; bool use_comm_exec; + perf_check_write_backward(); /* * Set the evsel leader links before we configure attributes, * since some might depend on this info. -- 1.8.3.4
Powered by blists - more mailing lists