All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Mike Galbraith <efault@gmx.de>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, mathieu.desnoyers@polymtl.ca,
	acme@redhat.com, hpa@zytor.com, mingo@redhat.com,
	a.p.zijlstra@chello.nl, efault@gmx.de, fweisbec@gmail.com,
	tglx@linutronix.de, mhiramat@redhat.com, mingo@elte.hu,
	avi@redhat.com
Subject: [tip:perf/urgent] perf tools: Handle relative paths while loading module symbols
Date: Thu, 24 Sep 2009 11:01:35 GMT	[thread overview]
Message-ID: <tip-dd906a0fe8d78b925702cd3916a65f34dfdfc011@git.kernel.org> (raw)
In-Reply-To: <1253779628.10513.8.camel@marge.simson.net>

Commit-ID:  dd906a0fe8d78b925702cd3916a65f34dfdfc011
Gitweb:     http://git.kernel.org/tip/dd906a0fe8d78b925702cd3916a65f34dfdfc011
Author:     Mike Galbraith <efault@gmx.de>
AuthorDate: Thu, 24 Sep 2009 10:07:08 +0200
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Thu, 24 Sep 2009 11:40:35 +0200

perf tools: Handle relative paths while loading module symbols

Inform util/module.c::mod_dso__load_module_paths() that relative
paths do exist in some modules.dep, and make it fail noisily should
it encounter a path that it doesn't understand, or a module it
cannot open.

Reported-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Mike Galbraith <efault@gmx.de>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: rostedt@goodmis.org
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Masami Hiramatsu <mhiramat@redhat.com>
LKML-Reference: <1253779628.10513.8.camel@marge.simson.net>
Signed-off-by: Ingo Molnar <mingo@elte.hu>


---
 tools/perf/util/module.c |   96 +++++++++++++++++++++++++++++++--------------
 1 files changed, 66 insertions(+), 30 deletions(-)

diff --git a/tools/perf/util/module.c b/tools/perf/util/module.c
index 3d567fe..8f81622 100644
--- a/tools/perf/util/module.c
+++ b/tools/perf/util/module.c
@@ -4,6 +4,7 @@
 #include "module.h"
 
 #include <libelf.h>
+#include <libgen.h>
 #include <gelf.h>
 #include <elf.h>
 #include <dirent.h>
@@ -409,35 +410,40 @@ out_failure:
 static int mod_dso__load_module_paths(struct mod_dso *self)
 {
 	struct utsname uts;
-	int count = 0, len;
+	int count = 0, len, err = -1;
 	char *line = NULL;
 	FILE *file;
-	char *path;
+	char *dpath, *dir;
 	size_t n;
 
 	if (uname(&uts) < 0)
-		goto out_failure;
+		return err;
 
 	len = strlen("/lib/modules/");
 	len += strlen(uts.release);
 	len += strlen("/modules.dep");
 
-	path = calloc(1, len);
-	if (path == NULL)
-		goto out_failure;
+	dpath = calloc(1, len);
+	if (dpath == NULL)
+		return err;
 
-	strcat(path, "/lib/modules/");
-	strcat(path, uts.release);
-	strcat(path, "/modules.dep");
+	strcat(dpath, "/lib/modules/");
+	strcat(dpath, uts.release);
+	strcat(dpath, "/modules.dep");
 
-	file = fopen(path, "r");
-	free(path);
+	file = fopen(dpath, "r");
 	if (file == NULL)
 		goto out_failure;
 
+	dir = dirname(dpath);
+	if (!dir)
+		goto out_failure;
+	strcat(dir, "/");
+
 	while (!feof(file)) {
-		char *name, *tmp;
 		struct module *module;
+		char *name, *path, *tmp;
+		FILE *modfile;
 		int line_len;
 
 		line_len = getline(&line, &n, file);
@@ -445,17 +451,41 @@ static int mod_dso__load_module_paths(struct mod_dso *self)
 			break;
 
 		if (!line)
-			goto out_failure;
+			break;
 
 		line[--line_len] = '\0'; /* \n */
 
-		path = strtok(line, ":");
+		path = strchr(line, ':');
+		if (!path)
+			break;
+		*path = '\0';
+
+		path = strdup(line);
 		if (!path)
-			goto out_failure;
+			break;
+
+		if (!strstr(path, dir)) {
+			if (strncmp(path, "kernel/", 7))
+				break;
+
+			free(path);
+			path = calloc(1, strlen(dir) + strlen(line) + 1);
+			if (!path)
+				break;
+			strcat(path, dir);
+			strcat(path, line);
+		}
+
+		modfile = fopen(path, "r");
+		if (modfile == NULL)
+			break;
+		fclose(modfile);
 
 		name = strdup(path);
-		name = strtok(name, "/");
+		if (!name)
+			break;
 
+		name = strtok(name, "/");
 		tmp = name;
 
 		while (tmp) {
@@ -463,26 +493,25 @@ static int mod_dso__load_module_paths(struct mod_dso *self)
 			if (tmp)
 				name = tmp;
 		}
+
 		name = strsep(&name, ".");
+		if (!name)
+			break;
 
-		/* Quirk: replace '-' with '_' in sound modules */
+		/* Quirk: replace '-' with '_' in all modules */
 		for (len = strlen(name); len; len--) {
 			if (*(name+len) == '-')
 				*(name+len) = '_';
 		}
 
 		module = module__new(name, path);
-		if (!module) {
-			fprintf(stderr, "load_module_paths: allocation error\n");
-			goto out_failure;
-		}
+		if (!module)
+			break;
 		mod_dso__insert_module(self, module);
 
 		module->sections = sec_dso__new_dso("sections");
-		if (!module->sections) {
-			fprintf(stderr, "load_module_paths: allocation error\n");
-			goto out_failure;
-		}
+		if (!module->sections)
+			break;
 
 		module->active = mod_dso__load_sections(module);
 
@@ -490,13 +519,20 @@ static int mod_dso__load_module_paths(struct mod_dso *self)
 			count++;
 	}
 
-	free(line);
-	fclose(file);
-
-	return count;
+	if (feof(file))
+		err = count;
+	else
+		fprintf(stderr, "load_module_paths: modules.dep parsing failure!\n");
 
 out_failure:
-	return -1;
+	if (dpath)
+		free(dpath);
+	if (file)
+		fclose(file);
+	if (line)
+		free(line);
+
+	return err;
 }
 
 int mod_dso__load_modules(struct mod_dso *dso)

  reply	other threads:[~2009-09-24 11:03 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-16 20:16 mailing list for trace users Steven Rostedt
2009-09-21 19:17 ` Frederic Weisbecker
2009-09-22  0:46   ` Li Zefan
2009-09-22  9:31     ` Ingo Molnar
2009-09-21 19:50 ` John Kacur
2009-09-22  9:13 ` Avi Kivity
2009-09-22 10:59   ` Peter Zijlstra
2009-09-22 11:51     ` Mike Galbraith
2009-09-22 11:18   ` Mike Galbraith
2009-09-22 11:28   ` Mike Galbraith
2009-09-22 11:34     ` Avi Kivity
2009-09-22 11:47       ` Mike Galbraith
2009-09-22 11:51         ` Avi Kivity
2009-09-22 11:54           ` Mike Galbraith
2009-09-22 13:53             ` Mike Galbraith
2009-09-22 14:03               ` Avi Kivity
2009-09-22 19:09                 ` Mike Galbraith
2009-09-22 19:14                   ` Avi Kivity
2009-09-23  8:26                     ` Mike Galbraith
2009-09-22 20:17           ` [perf] Finding uninstalled modules Was " Arnaldo Carvalho de Melo
2009-09-23  8:31             ` Avi Kivity
2009-09-23  8:37               ` Arnaldo Carvalho de Melo
2009-09-23  9:15               ` Ingo Molnar
2009-09-23  9:20               ` [patch] " Mike Galbraith
2009-09-23  9:55                 ` Avi Kivity
2009-09-23 10:02                   ` Mike Galbraith
2009-09-23 11:31                   ` Mike Galbraith
2009-09-23 12:00                     ` Mike Galbraith
2009-09-23 12:58                     ` Avi Kivity
2009-09-23 13:06                       ` Mike Galbraith
2009-09-23 13:10                       ` Avi Kivity
2009-09-23 13:50                         ` Mike Galbraith
2009-09-23 14:00                           ` Avi Kivity
2009-09-23 14:09                             ` Mike Galbraith
2009-09-23 14:39                               ` Avi Kivity
2009-09-23 14:52                                 ` Mike Galbraith
2009-09-23 14:56                                   ` Avi Kivity
2009-09-23 15:05                                     ` Mike Galbraith
2009-09-23 15:09                                       ` Avi Kivity
2009-09-23 15:26                                         ` Mike Galbraith
2009-09-24  8:07                                         ` Mike Galbraith
2009-09-24 11:01                                           ` tip-bot for Mike Galbraith [this message]
2009-09-23 11:49                 ` [tip:perf/urgent] perf tools: Fix module symbol loading bug tip-bot for Mike Galbraith
2009-09-22 22:32 ` mailing list for trace users David Miller
2009-09-23 11:47   ` Ingo Molnar
2009-09-23 16:45     ` Masami Hiramatsu
2009-09-23 17:00       ` Ingo Molnar
2009-09-23 18:07         ` Masami Hiramatsu
2009-09-23 20:07           ` Ingo Molnar
2009-09-23 18:14     ` David Miller
2009-09-23 19:30       ` Ingo Molnar
2009-09-23 19:40         ` John Kacur
2009-09-23 19:42           ` John Kacur
2009-09-23 19:59             ` Ingo Molnar
2009-09-23 21:24               ` Steven Rostedt
2009-09-23 21:41                 ` Ingo Molnar
2009-09-23 21:56                 ` Ingo Molnar
2009-09-23 19:49           ` Ingo Molnar
2009-09-23 20:08             ` John Kacur
2009-09-23 21:54         ` David Miller
2009-09-23 22:02           ` Ingo Molnar
2009-09-23 22:47         ` David Miller
2009-09-24 11:51           ` Ingo Molnar
2009-09-23 11:48   ` Ingo Molnar
2009-09-23 18:12     ` David Miller
2009-09-23 19:41       ` Ingo Molnar
2009-09-23 21:55         ` David Miller
2009-09-23 22:10           ` Ingo Molnar
2009-09-23 22:41             ` David Miller
2009-09-24 11:16               ` Ingo Molnar
2009-09-24 16:40                 ` David Miller
2009-09-24 18:58                 ` David Miller
2009-09-24 19:22                   ` Ingo Molnar

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-dd906a0fe8d78b925702cd3916a65f34dfdfc011@git.kernel.org \
    --to=efault@gmx.de \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@redhat.com \
    --cc=avi@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=mhiramat@redhat.com \
    --cc=mingo@elte.hu \
    --cc=mingo@redhat.com \
    --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.