| From ce204e9a4bd82e9e6e7479bca8057e45aaac5c42 Mon Sep 17 00:00:00 2001 |
| From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> |
| Date: Wed, 18 Feb 2015 15:51:41 +0200 |
| Subject: firmware: dmi_scan: Fix dmi scan to handle "End of Table" |
| structure |
| |
| From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> |
| |
| commit ce204e9a4bd82e9e6e7479bca8057e45aaac5c42 upstream. |
| |
| The dmi-sysfs should create "End of Table" entry, that is type 127. But |
| after adding initial SMBIOS v3 support fc43026278b2 ("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: Ard Biesheuvel <ard@linaro.org> |
| Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> |
| Signed-off-by: Matt Fleming <matt.fleming@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/firmware/dmi_scan.c | 13 +++++++------ |
| 1 file changed, 7 insertions(+), 6 deletions(-) |
| |
| --- a/drivers/firmware/dmi_scan.c |
| +++ b/drivers/firmware/dmi_scan.c |
| @@ -93,12 +93,6 @@ static void dmi_table(u8 *buf, u32 len, |
| 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 |
| * strings) before decoding to make sure we won't run off the |
| * table in dmi_decode or dmi_string |
| @@ -108,6 +102,13 @@ static void dmi_table(u8 *buf, u32 len, |
| data++; |
| if (data - buf < len - 1) |
| 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; |
| i++; |
| } |