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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CADDJ8CVnXu6HKuRqWJ+28CC6QuR-187tnSN8j7eSCb2KyKfXzA@mail.gmail.com>
Date:   Fri, 5 Nov 2021 18:40:19 -0700
From:   Denis Nikitin <denik@...omium.org>
To:     James Clark <james.clark@....com>
Cc:     acme@...nel.org, linux-perf-users@...r.kernel.org,
        Mark Rutland <mark.rutland@....com>,
        Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
        Jiri Olsa <jolsa@...hat.com>,
        Namhyung Kim <namhyung@...nel.org>,
        linux-kernel@...r.kernel.org
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@....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@....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@...omium.org>

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ