[PATCH v2 2/3] efi_loader: carve out efi_get_memory_map_alloc()
Ilias Apalodimas
ilias.apalodimas at linaro.org
Mon Jan 9 14:00:24 CET 2023
Hi Heinrich
[...]
> >>
> >> +/**
> >> + * efi_get_memory_map_alloc() - allocate map describing memory usage
> >> + *
> >> + * The caller is responsible for calling FreePool() if the call succeeds.
> >> + *
> >> + * @memory_map buffer to which the memory map is written
> >> + * @map_size size of the memory map
> >> + * Return: status code
> >> + */
> >> +efi_status_t efi_get_memory_map_alloc(efi_uintn_t *map_size,
> >> + struct efi_mem_desc **memory_map)
> >> +{
> >> + efi_status_t ret;
> >> +
> >> + *memory_map = NULL;
> >> + *map_size = 0;
> >> + ret = efi_get_memory_map(map_size, *memory_map, NULL, NULL, NULL);
> >
> > Although this is correct and efi_get_memory_map() will only return
> > EFI_BUFFER_TOO_SMALL, since we initialize the map_size to 0, I don't know
> > if code analysis tools are smart enough to understand this. Perhaps we
> > should initialize ret?
>
> After an assignment ret cannot be uninitialized.
>
> Did you find a path through efi_get_memory_map() returning an undefined
> value?
Nop, just misread the patch!
Regards
/Ilias
>
> Best regards
>
> Heinrich
>
> >
> >
> >> + if (ret == EFI_BUFFER_TOO_SMALL) {
> >> + *map_size += sizeof(struct efi_mem_desc); /* for the map */
> >> + ret = efi_allocate_pool(EFI_BOOT_SERVICES_DATA, *map_size,
> >> + (void **)memory_map);
> >> + if (ret != EFI_SUCCESS)
> >> + return ret;
> >> + ret = efi_get_memory_map(map_size, *memory_map,
> >> + NULL, NULL, NULL);
> >> + if (ret != EFI_SUCCESS) {
> >> + efi_free_pool(*memory_map);
> >> + *memory_map = NULL;
> >> + }
> >> + }
> >> +
> >> + return ret;
> >> +}
> >> +
> >> /**
> >> * efi_add_conventional_memory_map() - add a RAM memory area to the map
> >> *
> >> --
> >> 2.37.2
> >>
> >
> > Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> >
>
More information about the U-Boot
mailing list