summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkhali <khali>2010-11-16 21:16:37 +0000
committerkhali <khali>2010-11-16 21:16:37 +0000
commit78257f5a35c08ba5b903bb6c29afeeb2d5f2a697 (patch)
tree9dbce45275efbe0eb75c5063b4bee1f3a07edddd
parenta221f0d108ebac9657384d6d945dfb400d8c6550 (diff)
downloaddmidecode-78257f5a35c08ba5b903bb6c29afeeb2d5f2a697.tar.gz
Prevent unlikely array overrun when decoding processor family value 0xBE
(DMI type 4).
-rw-r--r--CHANGELOG2
-rw-r--r--dmidecode.c20
2 files changed, 14 insertions, 8 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 0d92b93..39add36 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,8 @@
* dmidecode.c: Handle ambiguous processor family value 0x30
(DMI type 4).
+ * dmidecode.c: Prevent unlikely array overrun when decoding
+ processor family value 0xBE (DMI type 4).
2010-11-11 Jean Delvare <khali@linux-fr.org>
diff --git a/dmidecode.c b/dmidecode.c
index 342d125..ad8fe64 100644
--- a/dmidecode.c
+++ b/dmidecode.c
@@ -806,15 +806,19 @@ static const char *dmi_processor_family(const struct dmi_header *h, u16 ver)
/* Special case for ambiguous value 0xBE */
if (code == 0xBE)
{
- const char *manufacturer = dmi_string(h, data[0x07]);
+ if (h->length >= 0x08)
+ {
+ const char *manufacturer = dmi_string(h, data[0x07]);
+
+ /* Best bet based on manufacturer string */
+ if (strstr(manufacturer, "Intel") != NULL
+ || strncasecmp(manufacturer, "Intel", 5) == 0)
+ return "Core 2";
+ if (strstr(manufacturer, "AMD") != NULL
+ || strncasecmp(manufacturer, "AMD", 3) == 0)
+ return "K7";
+ }
- /* Best bet based on manufacturer string */
- if (strstr(manufacturer, "Intel") != NULL
- || strncasecmp(manufacturer, "Intel", 5) == 0)
- return "Core 2";
- if (strstr(manufacturer, "AMD") != NULL
- || strncasecmp(manufacturer, "AMD", 3) == 0)
- return "K7";
return "Core 2 or K7";
}