[flashrom] [PATCH] Ensure DMI strings used in dmi_compare() are not NULL.

Stefan Tauner stefan.tauner at student.tuwien.ac.at
Tue Oct 29 00:12:50 CET 2013


Previously the external DMI decoder did not allow this to happen because
all possible pointers were initialized at startup by the output of
'dmidecode -s ...' which has default values for all supported types.

The now active internal DMI decoder does work differently: it scans the
complete DMI table once and copies the available strings. Therefore, strings
that are not set by the firmware are left at their default value of NULL.

Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
---
 dmi.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/dmi.c b/dmi.c
index 14f3871..ef7ae2c 100644
--- a/dmi.c
+++ b/dmi.c
@@ -406,8 +406,8 @@ void dmi_init(void)
  * at the beginning and '$' at the end. So you can look for "^prefix",
  * "suffix$", "substring" or "^complete string$".
  *
- * @param value The string to check.
- * @param pattern The pattern.
+ * @param value The non-NULL string to check.
+ * @param pattern The non-NULL pattern.
  * @return Nonzero if pattern matches.
  */
 static int dmi_compare(const char *value, const char *pattern)
@@ -454,9 +454,13 @@ int dmi_match(const char *pattern)
 	if (!has_dmi_support)
 		return 0;
 
-	for (i = 0; i < ARRAY_SIZE(dmi_strings); i++)
+	for (i = 0; i < ARRAY_SIZE(dmi_strings); i++) {
+		if (dmi_strings[i].value == NULL)
+			continue;
+
 		if (dmi_compare(dmi_strings[i].value, pattern))
 			return 1;
+	}
 
 	return 0;
 }
-- 
Kind regards, Stefan Tauner





More information about the flashrom mailing list