Messages in this thread | | | From | Denis Nikitin <> | Date | Fri, 5 Nov 2021 18:40:19 -0700 | Subject | Re: [PATCH 1/3] perf tools: Refactor out kernel symbol argument sanity checking |
| |
On Mon, Oct 18, 2021 at 6:48 AM James Clark <james.clark@arm.com> wrote: > > User supplied values for vmlinux and kallsyms are checked before > continuing. Refactor this into a function so that it can be used > elsewhere. > > Signed-off-by: James Clark <james.clark@arm.com> > --- > tools/perf/builtin-report.c | 13 ++----------- > tools/perf/util/symbol.c | 22 ++++++++++++++++++++++ > tools/perf/util/symbol.h | 2 ++ > 3 files changed, 26 insertions(+), 11 deletions(-) > > diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c > index a0316ce910db..8167ebfe776a 100644 > --- a/tools/perf/builtin-report.c > +++ b/tools/perf/builtin-report.c > @@ -1378,18 +1378,9 @@ int cmd_report(int argc, const char **argv) > if (quiet) > perf_quiet_option(); > > - if (symbol_conf.vmlinux_name && > - access(symbol_conf.vmlinux_name, R_OK)) { > - pr_err("Invalid file: %s\n", symbol_conf.vmlinux_name); > - ret = -EINVAL; > - goto exit; > - } > - if (symbol_conf.kallsyms_name && > - access(symbol_conf.kallsyms_name, R_OK)) { > - pr_err("Invalid file: %s\n", symbol_conf.kallsyms_name); > - ret = -EINVAL; > + ret = symbol__validate_sym_arguments(); > + if (ret) > goto exit; > - } > > if (report.inverted_callchain) > callchain_param.order = ORDER_CALLER; > diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c > index 0fc9a5410739..8fad1f0d41cb 100644 > --- a/tools/perf/util/symbol.c > +++ b/tools/perf/util/symbol.c > @@ -2630,3 +2630,25 @@ struct mem_info *mem_info__new(void) > refcount_set(&mi->refcnt, 1); > return mi; > } > + > +/* > + * Checks that user supplied symbol kernel files are accessible because > + * the default mechanism for accessing elf files fails silently. i.e. if > + * debug syms for a build ID aren't found perf carries on normally. When > + * they are user supplied we should assume that the user doesn't want to > + * silently fail. > + */ > +int symbol__validate_sym_arguments(void) > +{ > + if (symbol_conf.vmlinux_name && > + access(symbol_conf.vmlinux_name, R_OK)) { > + pr_err("Invalid file: %s\n", symbol_conf.vmlinux_name); > + return -EINVAL; > + } > + if (symbol_conf.kallsyms_name && > + access(symbol_conf.kallsyms_name, R_OK)) { > + pr_err("Invalid file: %s\n", symbol_conf.kallsyms_name); > + return -EINVAL; > + } > + return 0; > +} > diff --git a/tools/perf/util/symbol.h b/tools/perf/util/symbol.h > index 954d6a049ee2..166196686f2e 100644 > --- a/tools/perf/util/symbol.h > +++ b/tools/perf/util/symbol.h > @@ -286,4 +286,6 @@ static inline void __mem_info__zput(struct mem_info **mi) > > #define mem_info__zput(mi) __mem_info__zput(&mi) > > +int symbol__validate_sym_arguments(void); > + > #endif /* __PERF_SYMBOL */ > -- > 2.28.0 >
Reviewed-by: Denis Nikitin <denik@chromium.org>
| |