]>
Commit | Line | Data |
---|---|---|
f24163ee GKH |
1 | From ce204e9a4bd82e9e6e7479bca8057e45aaac5c42 Mon Sep 17 00:00:00 2001 |
2 | From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> | |
3 | Date: Wed, 18 Feb 2015 15:51:41 +0200 | |
4 | Subject: firmware: dmi_scan: Fix dmi scan to handle "End of Table" | |
5 | structure | |
6 | ||
7 | From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> | |
8 | ||
9 | commit ce204e9a4bd82e9e6e7479bca8057e45aaac5c42 upstream. | |
10 | ||
11 | The dmi-sysfs should create "End of Table" entry, that is type 127. But | |
12 | after adding initial SMBIOS v3 support fc43026278b2 ("dmi: add support | |
13 | for SMBIOS 3.0 64-bit entry point") the 127-0 entry is not handled any | |
14 | more, as result it's not created in dmi sysfs for instance. This is | |
15 | important because the size of whole DMI table must correspond to sum of | |
16 | all DMI entry sizes. | |
17 | ||
18 | So move the end-of-table check after it's handled by dmi_table. | |
19 | ||
20 | Reviewed-by: Ard Biesheuvel <ard@linaro.org> | |
21 | Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> | |
22 | Signed-off-by: Matt Fleming <matt.fleming@intel.com> | |
23 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
24 | ||
25 | --- | |
26 | drivers/firmware/dmi_scan.c | 13 +++++++------ | |
27 | 1 file changed, 7 insertions(+), 6 deletions(-) | |
28 | ||
29 | --- a/drivers/firmware/dmi_scan.c | |
30 | +++ b/drivers/firmware/dmi_scan.c | |
31 | @@ -93,12 +93,6 @@ static void dmi_table(u8 *buf, u32 len, | |
32 | const struct dmi_header *dm = (const struct dmi_header *)data; | |
33 | ||
34 | /* | |
35 | - * 7.45 End-of-Table (Type 127) [SMBIOS reference spec v3.0.0] | |
36 | - */ | |
37 | - if (dm->type == DMI_ENTRY_END_OF_TABLE) | |
38 | - break; | |
39 | - | |
40 | - /* | |
41 | * We want to know the total length (formatted area and | |
42 | * strings) before decoding to make sure we won't run off the | |
43 | * table in dmi_decode or dmi_string | |
44 | @@ -108,6 +102,13 @@ static void dmi_table(u8 *buf, u32 len, | |
45 | data++; | |
46 | if (data - buf < len - 1) | |
47 | decode(dm, private_data); | |
48 | + | |
49 | + /* | |
50 | + * 7.45 End-of-Table (Type 127) [SMBIOS reference spec v3.0.0] | |
51 | + */ | |
52 | + if (dm->type == DMI_ENTRY_END_OF_TABLE) | |
53 | + break; | |
54 | + | |
55 | data += 2; | |
56 | i++; | |
57 | } |