On Mon, 16 Jun 2025 at 16:46, Heinrich Schuchardt <xypron.g...@gmx.de> wrote: > > On 16.06.25 15:09, Ilias Apalodimas wrote: > > Hi Paul > > > > [...] > > > >> +/** > >> + * efi_realloc() - reallocate boot services data pool memory > >> + * > >> + * Reallocate memory from pool for a new size and copy the data from old > >> one. > >> + * > >> + * @ptr: pointer to old buffer > >> + * @size: number of bytes to allocate > >> + * Return: EFI status to indicate success or not > >> + */ > >> +efi_status_t efi_realloc(void **ptr, size_t size) > >> +{ > >> + efi_status_t ret; > >> + void *new_ptr; > >> + struct efi_pool_allocation *alloc; > >> + u64 num_pages = efi_size_in_pages(size + > >> + sizeof(struct > >> efi_pool_allocation)); > >> + size_t old_size; > >> + > >> + if (!*ptr) { > >> + *ptr = efi_alloc(size); > > > > Shouldn't you check that *ptr != NULL before returning success here? > > Hello Ilias, > > Do you mean "check that ptr != NULL"?
No i mean that the efi_alloc() call can fail as well Thanks /Ilias > > Best regards > > Heinrich > > > > >> + return EFI_SUCCESS; > >> + } > >> + > >> + ret = efi_check_allocated((uintptr_t)*ptr, true); > >> + if (ret != EFI_SUCCESS) > >> + return ret; > >> + > >> + alloc = container_of(*ptr, struct efi_pool_allocation, data); > >> + > >> + /* Check that this memory was allocated by efi_allocate_pool() */ > >> + if (((uintptr_t)alloc & EFI_PAGE_MASK) || > >> + alloc->checksum != checksum(alloc)) { > >> + printf("%s: illegal realloc 0x%p\n", __func__, *ptr); > >> + return EFI_INVALID_PARAMETER; > >> + } > >> + > >> + /* Don't realloc. The actual size in pages is the same. */ > >> + if (alloc->num_pages == num_pages) > >> + return EFI_SUCCESS; > >> + > >> + old_size = alloc->num_pages * EFI_PAGE_SIZE - > >> + sizeof(struct efi_pool_allocation); > >> + > >> + new_ptr = efi_alloc(size); > >> + > >> + /* copy old data to new alloced buffer */ > >> + memcpy(new_ptr, *ptr, min(size, old_size)); > >> + > >> + /* free the old buffer */ > >> + efi_free_pool(*ptr); > >> + > >> + *ptr = new_ptr; > >> + > >> + return EFI_SUCCESS; > >> +} > >> + > >> /** > >> * efi_free_pool() - free memory from pool > >> * > >> -- > >> 2.39.5 > >> > > > > Thanks > > /Ilias >