[PATCH] uefi: uefirtvariable: fix the fail GUID checking for uniqueness of variable (LP: #1311822)
Alex Hung
alex.hung at canonical.com
Mon Apr 28 03:27:01 UTC 2014
On 04/25/2014 03:44 PM, 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.
>
> 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: Alex Hung <alex.hung at canonical.com>
More information about the fwts-devel
mailing list