[added,to,the,3.18,stable,tree] firmware: dmi_scan: Fix dmi scan to handle "End of Table" structure

Message ID 1426648483-4376-12-git-send-email-sasha.levin@oracle.com
State New
Headers show

Commit Message

Sasha Levin March 18, 2015, 3:14 a.m.
From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>

This patch has been added to the 3.18 stable tree. If you have any
objections, please let us know.

Comments

Ivan Khoronzhuk March 18, 2015, 9:17 a.m. | #1
Sasha,

It improves dmi_table scan in 3.18 but not fix.
It fixes beginning from 3.19 only.

On 18.03.15 05:14, Sasha Levin wrote:
> From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
>
> This patch has been added to the 3.18 stable tree. If you have any
> objections, please let us know.
>
> ===============
>
> [ Upstream commit ce204e9a4bd82e9e6e7479bca8057e45aaac5c42 ]
>
> 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: Sasha Levin <sasha.levin@oracle.com>
> ---
>   drivers/firmware/dmi_scan.c | 7 +++++++
>   1 file changed, 7 insertions(+)
>
> diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
> index 84bc2a5..3a53c36 100644
> --- a/drivers/firmware/dmi_scan.c
> +++ b/drivers/firmware/dmi_scan.c
> @@ -102,6 +102,13 @@ static void dmi_table(u8 *buf, u32 len, int num,
>   			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++;
>   	}

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Ivan Khoronzhuk March 18, 2015, 6:53 p.m. | #2
Sasha,

I just saw that patch in question was not applied as expected.
Here patch adds lines only, but in original patch you also delete lines 
added by SBIOS v3 patch.
So I just checkouted on v3.18 and saw that SMBIOS v3 was not present in 
dmi_scan.


On 18.03.15 20:01, Sasha Levin wrote:
> Ivan,
>
>  From what I can tell the SMBIOS v3 support patch was added in 3.18, and
> that what the commit message says that this patch fixes.
>
> What am I missing?
>
>
> Thanks,
> Sasha
>
> On 03/18/2015 05:17 AM, Ivan Khoronzhuk wrote:
>> Sasha,
>>
>> It improves dmi_table scan in 3.18 but not fix.
>> It fixes beginning from 3.19 only.
>>
>> On 18.03.15 05:14, Sasha Levin wrote:
>>> From: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org>
>>>
>>> This patch has been added to the 3.18 stable tree. If you have any
>>> objections, please let us know.
>>>
>>> ===============
>>>
>>> [ Upstream commit ce204e9a4bd82e9e6e7479bca8057e45aaac5c42 ]
>>>
>>> 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: Sasha Levin <sasha.levin@oracle.com>
>>> ---
>>>    drivers/firmware/dmi_scan.c | 7 +++++++
>>>    1 file changed, 7 insertions(+)
>>>
>>> diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
>>> index 84bc2a5..3a53c36 100644
>>> --- a/drivers/firmware/dmi_scan.c
>>> +++ b/drivers/firmware/dmi_scan.c
>>> @@ -102,6 +102,13 @@ static void dmi_table(u8 *buf, u32 len, int num,
>>>                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++;
>>>        }

--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

===============

[ Upstream commit ce204e9a4bd82e9e6e7479bca8057e45aaac5c42 ]

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: Sasha Levin <sasha.levin@oracle.com>
---
 drivers/firmware/dmi_scan.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index 84bc2a5..3a53c36 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -102,6 +102,13 @@  static void dmi_table(u8 *buf, u32 len, int num,
 			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++;
 	}