From a0c65705fc121f6882b41890f318667164a5d9ee Mon Sep 17 00:00:00 2001
From: Michal Marek <mmarek@suse.cz>
Date: Tue, 20 Sep 2011 11:44:35 +0200
Subject: [PATCH] modpost: Fix matching of dashes and underscores in
Module.supported
References: bnc#719090
Patch-mainline: Never, SLES feature
Signed-off-by: Michal Marek <mmarek@suse.cz>
---
scripts/mod/modpost.c | 41 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 40 insertions(+), 1 deletion(-)
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -1667,6 +1667,38 @@ static void check_sec_ref(struct module
}
#ifdef CONFIG_SUSE_KERNEL_SUPPORTED
+/*
+ * Replace dashes with underscores.
+ * Dashes inside character range patterns (e.g. [0-9]) are left unchanged.
+ * (copied from module-init-tools/util.c)
+ */
+static char *underscores(char *string)
+{
+ unsigned int i;
+
+ if (!string)
+ return NULL;
+
+ for (i = 0; string[i]; i++) {
+ switch (string[i]) {
+ case '-':
+ string[i] = '_';
+ break;
+
+ case ']':
+ warn("Unmatched bracket in %s\n", string);
+ break;
+
+ case '[':
+ i += strcspn(&string[i], "]");
+ if (!string[i])
+ warn("Unmatched bracket in %s\n", string);
+ break;
+ }
+ }
+ return string;
+}
+
void *supported_file;
unsigned long supported_size;
@@ -1697,14 +1729,21 @@ static const char *supported(struct modu
l = line + strlen(line);
if (l - line > 3 && !strcmp(l-3, ".ko"))
*(l-3) = '\0';
+ underscores(line);
/* skip directory components */
if ((basename = strrchr(mod->name, '/')))
basename++;
else
basename = mod->name;
- if (!strcmp(basename, line))
+ basename = strdup(basename);
+ underscores(basename);
+
+ if (!strcmp(basename, line)) {
+ free(basename);
return how;
+ }
+ free(basename);
}
return NULL;
}