ACK: [PATCH] uefi: uefirtvariable: fix the fail GUID checking for uniqueness of variable (LP: #1311822)
IvanHu
ivan.hu at canonical.com
Fri Apr 25 08:41:58 UTC 2014
On 04/25/2014 04:27 PM, Colin Ian King wrote:
> On 25/04/14 08:44, Ivan Hu wrote:
>> While using a simple hash bucket algorithm to check the uniqueness of each
>> variable and error if we encounter any duplicates, it used the same memory
>> address for GUID checking in each buckets. It makes the GUID would be identical,
>> so the result will be unexpected.
>
> After I figured out what the code was doing I realised what the final
> sentence should probably be:
>
> "Unfortunately, this makes the GUIDs identical, which causes incorrect
> GUID matches."
>
> Apart from that, it's good to me.
Thanks Colin, my poor English.:)
I'll amend the sentence when I push the patch to upstream.
>
>
>>
>> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
>> ---
>> src/uefi/uefirtvariable/uefirtvariable.c | 16 ++++++++++++++--
>> 1 file changed, 14 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
>> index 4b32693..5d31ad8 100644
>> --- a/src/uefi/uefirtvariable/uefirtvariable.c
>> +++ b/src/uefi/uefirtvariable/uefirtvariable.c
>> @@ -520,6 +520,7 @@ static void bucket_destroy(void)
>> struct efi_var_item *chain = item->next;
>>
>> free(item->name);
>> + free(item->guid);
>> free(item);
>> item = chain;
>> }
>> @@ -574,14 +575,24 @@ static int getnextvariable_test3(fwts_framework *fw)
>> goto err;
>> }
>>
>> - item->guid = &vendorguid;
>> - item->next = NULL;
>> + item->guid = malloc(sizeof(EFI_GUID));
>> + if (!item->guid) {
>> + fwts_failed(fw, LOG_LEVEL_HIGH,
>> + "UEFIRuntimeGetNextVariableName",
>> + "Failed to allocate memory for test.");
>> + free(item);
>> + goto err;
>> + }
>>
>> + memcpy(item->guid, &vendorguid, sizeof(EFI_GUID));
>> +
>> + item->next = NULL;
>> item->name = malloc(variablenamesize);
>> if (!item->name) {
>> fwts_failed(fw, LOG_LEVEL_HIGH,
>> "UEFIRuntimeGetNextVariableName",
>> "Failed to allocate memory for test.");
>> + free(item->guid);
>> free(item);
>> goto err;
>> }
>> @@ -596,6 +607,7 @@ static int getnextvariable_test3(fwts_framework *fw)
>> "UEFIRuntimeGetNextVariableName",
>> "Duplicate variable name found.");
>> free(item->name);
>> + free(item->guid);
>> free(item);
>> goto err;
>> }
>>
>
>
> Acked-by: Colin Ian King <colin.king at canonical.com>
>
More information about the fwts-devel
mailing list