Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1409253

Re: [PATCH perf/core v9 01/16] perf-symbol: Introduce filename__readable to check readability

From Arnaldo Carvalho de Melo <acme@kernel.org>
Newsgroups linux.kernel
Subject Re: [PATCH perf/core v9 01/16] perf-symbol: Introduce filename__readable to check readability
Date 2016-05-30 18:10 +0200
Message-ID <rExVn-6ui-3@gated-at.bofh.it> (permalink)
References <rDObT-25o-3@gated-at.bofh.it> <rDObU-25o-37@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Em Sun, May 29, 2016 at 12:15:13AM +0900, Masami Hiramatsu escreveu:
> Introduce filename__readable to check readability by opening
> the file directly. Since the access(R_OK) just checks the
> readability based on real UID/GID, it is ignored that the
> effective UID/GID and capabilities for some special file (e.g.
> /proc/kcore).
> filename__readable() directly opens given file with O_RDONLY
> so that the kernel checks it by effective UID/GID and capabilities.


You missed the Signed-off-by line.

- Arnaldo

> ---
>  tools/perf/util/symbol.c |   32 ++++++++++++++++++++++----------
>  1 file changed, 22 insertions(+), 10 deletions(-)
> 
> diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
> index 54c4ff2..a469346 100644
> --- a/tools/perf/util/symbol.c
> +++ b/tools/perf/util/symbol.c
> @@ -1641,6 +1641,20 @@ static int find_matching_kcore(struct map *map, char *dir, size_t dir_sz)
>  	return ret;
>  }
>  
> +/*
> + * Use open(O_RDONLY) to check readability directly instead of access(R_OK)
> + * since access(R_OK) only checks with real UID/GID but open() use effective
> + * UID/GID and actual capabilities (e.g. /proc/kcore requires CAP_SYS_RAWIO).
> + */
> +static bool filename__readable(const char *file)
> +{
> +	int fd = open(file, O_RDONLY);
> +	if (fd < 0)
> +		return false;
> +	close(fd);
> +	return true;
> +}
> +
>  static char *dso__find_kallsyms(struct dso *dso, struct map *map)
>  {
>  	u8 host_build_id[BUILD_ID_SIZE];
> @@ -1668,7 +1682,6 @@ static char *dso__find_kallsyms(struct dso *dso, struct map *map)
>  	/* Use /proc/kallsyms if possible */
>  	if (is_host) {
>  		DIR *d;
> -		int fd;
>  
>  		/* If no cached kcore go with /proc/kallsyms */
>  		d = opendir(path);
> @@ -1677,16 +1690,15 @@ static char *dso__find_kallsyms(struct dso *dso, struct map *map)
>  		closedir(d);
>  
>  		/*
> -		 * Do not check the build-id cache, until we know we cannot use
> -		 * /proc/kcore.
> +		 * Do not check the build-id cache, unless we know we cannot use
> +		 * /proc/kcore or module maps don't match to /proc/kallsyms.
> +		 * To check readability of /proc/kcore, do not use access(R_OK)
> +		 * since /proc/kcore requires CAP_SYS_RAWIO to read and access
> +		 * can't check it.
>  		 */
> -		fd = open("/proc/kcore", O_RDONLY);
> -		if (fd != -1) {
> -			close(fd);
> -			/* If module maps match go with /proc/kallsyms */
> -			if (!validate_kcore_addresses("/proc/kallsyms", map))
> -				goto proc_kallsyms;
> -		}
> +		if (filename__readable("/proc/kcore") &&
> +		    !validate_kcore_addresses("/proc/kallsyms", map))
> +			goto proc_kallsyms;
>  
>  		/* Find kallsyms in build-id cache with kcore */
>  		if (!find_matching_kcore(map, path, sizeof(path)))

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH perf/core v9 00/16] perf-probe --cache and SDT support Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-28 17:20 +0200
  [PATCH perf/core v9 08/16] perf/sdt: ELF support for SDT Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-28 17:20 +0200
  [PATCH perf/core v9 15/16] perf probe: Support @BUILDID or @FILE suffix for SDT events Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-28 17:20 +0200
  [PATCH perf/core v9 01/16] perf-symbol: Introduce filename__readable to check readability Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-28 17:20 +0200
    Re: [PATCH perf/core v9 01/16] perf-symbol: Introduce  filename__readable to check readability Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-05-30 18:10 +0200
      Re: [PATCH perf/core v9 01/16] perf-symbol: Introduce  filename__readable to check readability Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-31 08:00 +0200
    Re: [PATCH perf/core v9 01/16] perf-symbol: Introduce  filename__readable to check readability Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-05-30 18:10 +0200
  [PATCH perf/core v9 09/16] perf probe: Add group name support Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-28 17:20 +0200
  [PATCH perf/core v9 04/16] perf probe: Add --cache option to cache the probe definitions Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-28 17:20 +0200
  [PATCH perf/core v9 05/16] perf probe: Use cache entry if possible Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-28 17:20 +0200
  [PATCH perf/core v9 14/16] perf probe: Allow wildcard for cached events Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-28 17:20 +0200
  [PATCH perf/core v9 10/16] perf buildid-cache: Scan and import user SDT events to probe cache Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-28 17:20 +0200
  Re: [PATCH perf/core v9 00/16] perf-probe --cache and SDT support Namhyung Kim <namhyung@kernel.org> - 2016-05-30 06:00 +0200
    Re: [PATCH perf/core v9 00/16] perf-probe --cache and SDT support Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-30 16:40 +0200
    Re: [PATCH perf/core v9 00/16] perf-probe --cache and SDT support Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-05-30 18:20 +0200
  Re: [PATCH perf/core v9 00/16] perf-probe --cache and SDT support Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-05-30 18:30 +0200
    Re: [PATCH perf/core v9 00/16] perf-probe --cache and SDT support Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-05-30 18:40 +0200
      Re: [PATCH perf/core v9 00/16] perf-probe --cache and SDT support Masami Hiramatsu <mhiramat@kernel.org> - 2016-05-31 10:10 +0200

csiph-web