diff options
author | khali <khali> | 2010-11-16 21:16:37 +0000 |
---|---|---|
committer | khali <khali> | 2010-11-16 21:16:37 +0000 |
commit | 78257f5a35c08ba5b903bb6c29afeeb2d5f2a697 (patch) | |
tree | 9dbce45275efbe0eb75c5063b4bee1f3a07edddd | |
parent | a221f0d108ebac9657384d6d945dfb400d8c6550 (diff) | |
download | dmidecode-78257f5a35c08ba5b903bb6c29afeeb2d5f2a697.tar.gz |
Prevent unlikely array overrun when decoding processor family value 0xBE
(DMI type 4).
-rw-r--r-- | CHANGELOG | 2 | ||||
-rw-r--r-- | dmidecode.c | 20 |
2 files changed, 14 insertions, 8 deletions
@@ -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"; } |