All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Masami Hiramatsu <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: mhiramat@kernel.org, hpa@zytor.com, mingo@kernel.org,
	ananth@linux.vnet.ibm.com, peterz@infradead.org,
	hemant@linux.vnet.ibm.com, linux-kernel@vger.kernel.org,
	acme@redhat.com, tglx@linutronix.de, brendan.d.gregg@gmail.com,
	namhyung@kernel.org
Subject: [tip:perf/core] perf symbols: Introduce filename__readable to check readability
Date: Wed, 1 Jun 2016 23:34:26 -0700	[thread overview]
Message-ID: <tip-11870d714a1b744a0225e90b0b395346357defe9@git.kernel.org> (raw)
In-Reply-To: <20160528151513.16098.97576.stgit@devbox>

Commit-ID:  11870d714a1b744a0225e90b0b395346357defe9
Gitweb:     http://git.kernel.org/tip/11870d714a1b744a0225e90b0b395346357defe9
Author:     Masami Hiramatsu <mhiramat@kernel.org>
AuthorDate: Sun, 29 May 2016 00:15:13 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Mon, 30 May 2016 13:15:01 -0300

perf symbols: Introduce filename__readable to check readability

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.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>
Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
Cc: Hemant Kumar <hemant@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20160528151513.16098.97576.stgit@devbox
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 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)))

  parent reply	other threads:[~2016-06-02  6:35 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-28 15:15 [PATCH perf/core v9 00/16] perf-probe --cache and SDT support Masami Hiramatsu
2016-05-28 15:15 ` [PATCH perf/core v9 01/16] perf-symbol: Introduce filename__readable to check readability Masami Hiramatsu
2016-05-30 16:03   ` Arnaldo Carvalho de Melo
2016-05-30 16:04     ` Arnaldo Carvalho de Melo
2016-05-31  5:54       ` Masami Hiramatsu
2016-06-02  6:34   ` tip-bot for Masami Hiramatsu [this message]
2016-05-28 15:15 ` [PATCH perf/core v9 02/16] perf symbol: Cleanup the code flow of dso__find_kallsyms Masami Hiramatsu
2016-06-02  6:34   ` [tip:perf/core] perf symbols: " tip-bot for Masami Hiramatsu
2016-05-28 15:15 ` [PATCH perf/core v9 03/16] perf-buildid-cache: Use path/to/bin/buildid/elf instead of path/to/bin/buildid Masami Hiramatsu
2016-06-02  6:35   ` [tip:perf/core] perf buildid-cache: " tip-bot for Masami Hiramatsu
2016-05-28 15:15 ` [PATCH perf/core v9 04/16] perf probe: Add --cache option to cache the probe definitions Masami Hiramatsu
2016-05-28 15:15 ` [PATCH perf/core v9 05/16] perf probe: Use cache entry if possible Masami Hiramatsu
2016-05-28 15:16 ` [PATCH perf/core v9 06/16] perf probe: Show all cached probes Masami Hiramatsu
2016-05-28 15:16 ` [PATCH perf/core v9 07/16] perf probe: Remove caches when --cache is given Masami Hiramatsu
2016-05-28 15:16 ` [PATCH perf/core v9 08/16] perf/sdt: ELF support for SDT Masami Hiramatsu
2016-05-28 15:16 ` [PATCH perf/core v9 09/16] perf probe: Add group name support Masami Hiramatsu
2016-05-28 15:16 ` [PATCH perf/core v9 10/16] perf buildid-cache: Scan and import user SDT events to probe cache Masami Hiramatsu
2016-05-28 15:16 ` [PATCH perf/core v9 11/16] perf probe: Accept %sdt and %cached event name Masami Hiramatsu
2016-05-28 15:17 ` [PATCH perf/core v9 12/16] perf-list: Show SDT and pre-cached events Masami Hiramatsu
2016-05-28 15:17 ` [PATCH perf/core v9 13/16] perf-list: Skip SDTs placed in invalid binaries Masami Hiramatsu
2016-05-28 15:17 ` [PATCH perf/core v9 14/16] perf probe: Allow wildcard for cached events Masami Hiramatsu
2016-05-28 15:17 ` [PATCH perf/core v9 15/16] perf probe: Support @BUILDID or @FILE suffix for SDT events Masami Hiramatsu
2016-05-28 15:17 ` [PATCH perf/core v9 16/16] perf probe: Support a special SDT probe format Masami Hiramatsu
2016-05-30  3:54 ` [PATCH perf/core v9 00/16] perf-probe --cache and SDT support Namhyung Kim
2016-05-30 14:31   ` Masami Hiramatsu
2016-05-30 16:10   ` Arnaldo Carvalho de Melo
2016-05-31  9:01     ` Masami Hiramatsu
2016-05-31 13:40       ` Arnaldo Carvalho de Melo
2016-05-30 16:22 ` Arnaldo Carvalho de Melo
2016-05-30 16:30   ` Arnaldo Carvalho de Melo
2016-05-31  8:00     ` Masami Hiramatsu
2016-05-31 13:39       ` Arnaldo Carvalho de Melo
2016-05-31 16:30         ` Hemant Kumar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=tip-11870d714a1b744a0225e90b0b395346357defe9@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=acme@redhat.com \
    --cc=ananth@linux.vnet.ibm.com \
    --cc=brendan.d.gregg@gmail.com \
    --cc=hemant@linux.vnet.ibm.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.