]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blame - releases/3.19.2/firmware-dmi_scan-fix-dmi-scan-to-handle-end-of-table.patch
4.14-stable patches
[thirdparty/kernel/stable-queue.git] / releases / 3.19.2 / firmware-dmi_scan-fix-dmi-scan-to-handle-end-of-table.patch
CommitLineData
f24163ee
GKH
1From ce204e9a4bd82e9e6e7479bca8057e45aaac5c42 Mon Sep 17 00:00:00 2001
2From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
3Date: Wed, 18 Feb 2015 15:51:41 +0200
4Subject: firmware: dmi_scan: Fix dmi scan to handle "End of Table"
5 structure
6
7From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
8
9commit ce204e9a4bd82e9e6e7479bca8057e45aaac5c42 upstream.
10
11The dmi-sysfs should create "End of Table" entry, that is type 127. But
12after adding initial SMBIOS v3 support fc43026278b2 ("dmi: add support
13for SMBIOS 3.0 64-bit entry point") the 127-0 entry is not handled any
14more, as result it's not created in dmi sysfs for instance. This is
15important because the size of whole DMI table must correspond to sum of
16all DMI entry sizes.
17
18So move the end-of-table check after it's handled by dmi_table.
19
20Reviewed-by: Ard Biesheuvel <ard@linaro.org>
21Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
22Signed-off-by: Matt Fleming <matt.fleming@intel.com>
23Signed-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 }