From: Brendan Shanks bshanks@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57019 --- programs/wineboot/wineboot.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c index 27986527edf..1b04fd3b202 100644 --- a/programs/wineboot/wineboot.c +++ b/programs/wineboot/wineboot.c @@ -822,7 +822,7 @@ static void create_bios_processor_values( HKEY system_key, const char *buf, UINT { const struct smbios_header *hdr; const struct smbios_processor *proc; - unsigned int pkg, core, offset, i; + unsigned int pkg, core, offset, i, thread_count; HKEY hkey, cpu_key, fpu_key = 0, env_key; SYSTEM_CPU_INFORMATION sci; PROCESSOR_POWER_INFORMATION* power_info; @@ -863,6 +863,7 @@ static void create_bios_processor_values( HKEY system_key, const char *buf, UINT for (pkg = core = 0; ; pkg++) { if (!(hdr = find_smbios_entry( SMBIOS_TYPE_PROCESSOR, pkg, buf, len ))) break; + if (hdr->length < 0x28) break; /* version 2.5 is required */ proc = (const struct smbios_processor *)hdr; offset = (const char *)proc - buf + proc->hdr.length; version = get_smbios_string( proc->version, buf, offset, len ); @@ -894,7 +895,8 @@ static void create_bios_processor_values( HKEY system_key, const char *buf, UINT break; }
- for (i = 0; i < proc->thread_count2; i++, core++) + thread_count = (proc->hdr.length >= 0x30) ? proc->thread_count2 : proc->thread_count; + for (i = 0; i < thread_count; i++, core++) { swprintf( buffer, ARRAY_SIZE(buffer), L"%u", core ); if (!RegCreateKeyExW( cpu_key, buffer, 0, NULL, REG_OPTION_VOLATILE,