Commit 632151d9 authored by Ivan Khoronzhuk's avatar Ivan Khoronzhuk Committed by Greg Kroah-Hartman

firmware: dmi_scan: Fix dmi scan to handle "End of Table" structure

commit ce204e9a upstream.

The dmi-sysfs should create "End of Table" entry, that is type 127. But
after adding initial SMBIOS v3 support fc430262 ("dmi: add support
for SMBIOS 3.0 64-bit entry point") the 127-0 entry is not handled any
more, as result it's not created in dmi sysfs for instance. This is
important because the size of whole DMI table must correspond to sum of
all DMI entry sizes.

So move the end-of-table check after it's handled by dmi_table.
Reviewed-by: default avatarArd Biesheuvel <ard@linaro.org>
Signed-off-by: default avatarIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>
Signed-off-by: default avatarMatt Fleming <matt.fleming@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 96b012a4
...@@ -92,12 +92,6 @@ static void dmi_table(u8 *buf, u32 len, int num, ...@@ -92,12 +92,6 @@ static void dmi_table(u8 *buf, u32 len, int num,
while ((i < num) && (data - buf + sizeof(struct dmi_header)) <= len) { while ((i < num) && (data - buf + sizeof(struct dmi_header)) <= len) {
const struct dmi_header *dm = (const struct dmi_header *)data; const struct dmi_header *dm = (const struct dmi_header *)data;
/*
* 7.45 End-of-Table (Type 127) [SMBIOS reference spec v3.0.0]
*/
if (dm->type == DMI_ENTRY_END_OF_TABLE)
break;
/* /*
* We want to know the total length (formatted area and * We want to know the total length (formatted area and
* strings) before decoding to make sure we won't run off the * strings) before decoding to make sure we won't run off the
...@@ -108,6 +102,13 @@ static void dmi_table(u8 *buf, u32 len, int num, ...@@ -108,6 +102,13 @@ static void dmi_table(u8 *buf, u32 len, int num,
data++; data++;
if (data - buf < len - 1) if (data - buf < len - 1)
decode(dm, private_data); decode(dm, private_data);
/*
* 7.45 End-of-Table (Type 127) [SMBIOS reference spec v3.0.0]
*/
if (dm->type == DMI_ENTRY_END_OF_TABLE)
break;
data += 2; data += 2;
i++; i++;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment