Blob Blame History Raw
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;
 }