From 534b89a9f6a86a28300cd71619112c4bbca7c0ae Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Sat, 1 Jul 2006 10:10:19 +0200 Subject: kbuild: fix segv in modpost Parsing an old Modules.symvers file casued modpost to SEGV. Signed-off-by: Sam Ravnborg --- scripts/mod/modpost.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'scripts') diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 0dd16177642..65411665e13 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -205,6 +205,8 @@ static const char *export_str(enum export ex) static enum export export_no(const char * s) { int i; + if (!s) + return export_unknown; for (i = 0; export_list[i].export != export_unknown; i++) { if (strcmp(export_list[i].str, s) == 0) return export_list[i].export; @@ -1271,7 +1273,7 @@ static void write_if_changed(struct buffer *b, const char *fname) } /* parse Module.symvers file. line format: - * 0x12345678symbolmodule[export] + * 0x12345678symbolmodule[[export]something] **/ static void read_dump(const char *fname, unsigned int kernel) { @@ -1284,7 +1286,7 @@ static void read_dump(const char *fname, unsigned int kernel) return; while ((line = get_next_line(&pos, file, size))) { - char *symname, *modname, *d, *export; + char *symname, *modname, *d, *export, *end; unsigned int crc; struct module *mod; struct symbol *s; @@ -1297,7 +1299,8 @@ static void read_dump(const char *fname, unsigned int kernel) *modname++ = '\0'; if ((export = strchr(modname, '\t')) != NULL) *export++ = '\0'; - + if (export && ((end = strchr(export, '\t')) != NULL)) + *end = '\0'; crc = strtoul(line, &d, 16); if (*symname == '\0' || *modname == '\0' || *d != '\0') goto fail; -- cgit v1.2.3