All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf tools: Do not fail in case of empty HOME env variable
@ 2017-03-30 14:46 Jiri Olsa
  2017-03-30 15:42 ` Arnaldo Carvalho de Melo
  2017-04-02 19:15 ` [tip:perf/core] " tip-bot for Jiri Olsa
  0 siblings, 2 replies; 3+ messages in thread
From: Jiri Olsa @ 2017-03-30 14:46 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: lkml, Ingo Molnar, Peter Zijlstra, Namhyung Kim, David Ahern,
	Jan Stancek

From: Jiri Olsa <jolsa@redhat.com>

Currently we fail in following case:
  $ unset HOME
  $ ./perf record ls
  $ echo $?
  255

It's because of the config code init fails due to missing
HOME variable value. Fixing this by skipping the user
config init if there's no HOME variable value.

Reported-by: Jan Stancek <jstancek@redhat.com>
Link: http://lkml.kernel.org/n/tip-jud8aep511w535u10coc5lxn@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/perf/util/config.c | 54 +++++++++++++++++++++++++++---------------------
 1 file changed, 31 insertions(+), 23 deletions(-)

diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index 0c7d5a4975cd..7b01d59076d3 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -627,6 +627,8 @@ static int perf_config_set__init(struct perf_config_set *set)
 {
 	int ret = -1;
 	const char *home = NULL;
+	char *user_config;
+	struct stat st;
 
 	/* Setting $PERF_CONFIG makes perf read _only_ the given config file. */
 	if (config_exclusive_filename)
@@ -637,35 +639,41 @@ static int perf_config_set__init(struct perf_config_set *set)
 	}
 
 	home = getenv("HOME");
-	if (perf_config_global() && home) {
-		char *user_config = strdup(mkpath("%s/.perfconfig", home));
-		struct stat st;
 
-		if (user_config == NULL) {
-			warning("Not enough memory to process %s/.perfconfig, "
-				"ignoring it.", home);
-			goto out;
-		}
+	/*
+	 * Skip reading user config if:
+	 *   - there is no place to read it from (HOME)
+	 *   - we are asked not to (PERF_CONFIG_NOGLOBAL=1)
+	 */
+	if (!home || !*home || !perf_config_global())
+		return 0;
 
-		if (stat(user_config, &st) < 0) {
-			if (errno == ENOENT)
-				ret = 0;
-			goto out_free;
-		}
+	user_config = strdup(mkpath("%s/.perfconfig", home));
+	if (user_config == NULL) {
+		warning("Not enough memory to process %s/.perfconfig, "
+			"ignoring it.", home);
+		goto out;
+	}
+
+	if (stat(user_config, &st) < 0) {
+		if (errno == ENOENT)
+			ret = 0;
+		goto out_free;
+	}
 
-		ret = 0;
+	ret = 0;
 
-		if (st.st_uid && (st.st_uid != geteuid())) {
-			warning("File %s not owned by current user or root, "
-				"ignoring it.", user_config);
-			goto out_free;
-		}
+	if (st.st_uid && (st.st_uid != geteuid())) {
+		warning("File %s not owned by current user or root, "
+			"ignoring it.", user_config);
+		goto out_free;
+	}
+
+	if (st.st_size)
+		ret = perf_config_from_file(collect_config, user_config, set);
 
-		if (st.st_size)
-			ret = perf_config_from_file(collect_config, user_config, set);
 out_free:
-		free(user_config);
-	}
+	free(user_config);
 out:
 	return ret;
 }
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] perf tools: Do not fail in case of empty HOME env variable
  2017-03-30 14:46 [PATCH] perf tools: Do not fail in case of empty HOME env variable Jiri Olsa
@ 2017-03-30 15:42 ` Arnaldo Carvalho de Melo
  2017-04-02 19:15 ` [tip:perf/core] " tip-bot for Jiri Olsa
  1 sibling, 0 replies; 3+ messages in thread
From: Arnaldo Carvalho de Melo @ 2017-03-30 15:42 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: lkml, Ingo Molnar, Peter Zijlstra, Namhyung Kim, David Ahern,
	Jan Stancek

Em Thu, Mar 30, 2017 at 04:46:37PM +0200, Jiri Olsa escreveu:
> From: Jiri Olsa <jolsa@redhat.com>
> 
> Currently we fail in following case:
>   $ unset HOME
>   $ ./perf record ls
>   $ echo $?
>   255

Thanks, applied.

- Arnaldo

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [tip:perf/core] perf tools: Do not fail in case of empty HOME env variable
  2017-03-30 14:46 [PATCH] perf tools: Do not fail in case of empty HOME env variable Jiri Olsa
  2017-03-30 15:42 ` Arnaldo Carvalho de Melo
@ 2017-04-02 19:15 ` tip-bot for Jiri Olsa
  1 sibling, 0 replies; 3+ messages in thread
From: tip-bot for Jiri Olsa @ 2017-04-02 19:15 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: jolsa, namhyung, a.p.zijlstra, acme, dsahern, jolsa, hpa, mingo,
	tglx, jstancek, linux-kernel

Commit-ID:  3e00cbe8891a655520ca2cfe9b6d509d0a845f07
Gitweb:     http://git.kernel.org/tip/3e00cbe8891a655520ca2cfe9b6d509d0a845f07
Author:     Jiri Olsa <jolsa@redhat.com>
AuthorDate: Thu, 30 Mar 2017 16:46:37 +0200
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 31 Mar 2017 11:26:04 -0300

perf tools: Do not fail in case of empty HOME env variable

Currently we fail in the following case:

  $ unset HOME
  $ ./perf record ls
  $ echo $?
  255

It's because the config code init fails due to a missing HOME variable
value. Fix this by skipping the user config init if there's no HOME
variable value.

Reported-by: Jan Stancek <jstancek@redhat.com>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20170330144637.7468-1-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/config.c | 54 +++++++++++++++++++++++++++---------------------
 1 file changed, 31 insertions(+), 23 deletions(-)

diff --git a/tools/perf/util/config.c b/tools/perf/util/config.c
index 0c7d5a4..7b01d59 100644
--- a/tools/perf/util/config.c
+++ b/tools/perf/util/config.c
@@ -627,6 +627,8 @@ static int perf_config_set__init(struct perf_config_set *set)
 {
 	int ret = -1;
 	const char *home = NULL;
+	char *user_config;
+	struct stat st;
 
 	/* Setting $PERF_CONFIG makes perf read _only_ the given config file. */
 	if (config_exclusive_filename)
@@ -637,35 +639,41 @@ static int perf_config_set__init(struct perf_config_set *set)
 	}
 
 	home = getenv("HOME");
-	if (perf_config_global() && home) {
-		char *user_config = strdup(mkpath("%s/.perfconfig", home));
-		struct stat st;
 
-		if (user_config == NULL) {
-			warning("Not enough memory to process %s/.perfconfig, "
-				"ignoring it.", home);
-			goto out;
-		}
+	/*
+	 * Skip reading user config if:
+	 *   - there is no place to read it from (HOME)
+	 *   - we are asked not to (PERF_CONFIG_NOGLOBAL=1)
+	 */
+	if (!home || !*home || !perf_config_global())
+		return 0;
 
-		if (stat(user_config, &st) < 0) {
-			if (errno == ENOENT)
-				ret = 0;
-			goto out_free;
-		}
+	user_config = strdup(mkpath("%s/.perfconfig", home));
+	if (user_config == NULL) {
+		warning("Not enough memory to process %s/.perfconfig, "
+			"ignoring it.", home);
+		goto out;
+	}
+
+	if (stat(user_config, &st) < 0) {
+		if (errno == ENOENT)
+			ret = 0;
+		goto out_free;
+	}
 
-		ret = 0;
+	ret = 0;
 
-		if (st.st_uid && (st.st_uid != geteuid())) {
-			warning("File %s not owned by current user or root, "
-				"ignoring it.", user_config);
-			goto out_free;
-		}
+	if (st.st_uid && (st.st_uid != geteuid())) {
+		warning("File %s not owned by current user or root, "
+			"ignoring it.", user_config);
+		goto out_free;
+	}
+
+	if (st.st_size)
+		ret = perf_config_from_file(collect_config, user_config, set);
 
-		if (st.st_size)
-			ret = perf_config_from_file(collect_config, user_config, set);
 out_free:
-		free(user_config);
-	}
+	free(user_config);
 out:
 	return ret;
 }

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-04-02 19:18 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-30 14:46 [PATCH] perf tools: Do not fail in case of empty HOME env variable Jiri Olsa
2017-03-30 15:42 ` Arnaldo Carvalho de Melo
2017-04-02 19:15 ` [tip:perf/core] " tip-bot for Jiri Olsa

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.