[PATCH] acpi: gtdt: Fix the wrong checking of GTDT block
Colin Ian King
colin.king at canonical.com
Wed Mar 30 10:29:28 UTC 2016
On 30/03/16 11:23, Colin Ian King wrote:
> Hi there,
>
> I can see the bug now, I think we need to combine your patch plus a fix
> to the original code and then we get the best of both..
Actually, it was a single change and I've tested this against a template
table generated by iasl, so I am happy it fixes the issue. Fix sent to
mailing list:
https://lists.ubuntu.com/archives/fwts-devel/2016-March/007705.html
thanks for reporting this Vikas.
Colin
>
>
> On 23/03/16 08:45, Vikas C Sajjan wrote:
>> when "fwts gtdt" is executed, fwts throws below error even when the
>> GTDT table looks fine in the "fwts acpidump".
>>
>> gtdt: GTDT Generic Timer Description Table test
>> -------------------------------
>> Test 1 of 1: GTDT Generic Timer Description Table test.
>> FAILED [HIGH] GTDTShortBlock: Test 1, GTDT block is too short
>> -------------------------------
>>
>> This patch removes the error checking,
>> since (ptr + 20) is always less than end_ptr even for the valid
>> GTDT block.
>>
>> Signed-off-by: Vikas C Sajjan <vikas.cha.sajjan at hpe.com>
>> Signed-off-by: Sunil V L <sunil.vl at hpe.com>
>> ---
>> src/acpi/gtdt/gtdt.c | 7 -------
>> 1 file changed, 7 deletions(-)
>>
>> diff --git a/src/acpi/gtdt/gtdt.c b/src/acpi/gtdt/gtdt.c
>> index 421f17f..05ccea1 100644
>> --- a/src/acpi/gtdt/gtdt.c
>> +++ b/src/acpi/gtdt/gtdt.c
>> @@ -75,13 +75,6 @@ static int gtdt_test1(fwts_framework *fw)
>> case 0x00:
>> /* GT Block Structure */
>> block = (fwts_acpi_table_gtdt_block *)ptr;
>> - if (ptr + 20 < end_ptr) {
>
> My code was wrong here, it should be checking to see if we don't run off
> the end of the buffer with the following check:
>
> if (ptr + 20 > end_ptr)
>
> I'll post a fix later on with your header sanity check plus a fix to my
> broken comparison.
>
>
>> - passed = false;
>> - fwts_failed(fw, LOG_LEVEL_HIGH,
>> - "GTDTShortBlock",
>> - "GTDT block is too short");
>> - goto done;
>> - }
>> if (block->length < 20) {
>> passed = false;
>> fwts_failed(fw, LOG_LEVEL_HIGH,
>>
>
More information about the fwts-devel
mailing list