On 02/24/16 20:30, David Woodhouse wrote:
> On Wed, 2016-02-24 at 18:20 +0100, Laszlo Ersek wrote:
>>
>> Now, in the edk2 build, OPENSSL_free() boils down to a FreePool().
>> However, *unlike* the free() function of the standard C library,
>> FreePool() does *not* handle a NULL argument transparently.
> 
> Well that's just utterly batshit insane, now isn't it?
> 
> I'm amazed that didn't bite us before. If we're providing a free()
> function especially for OpenSSL because the NIH principle guiding UEFI
> was *so* strong that we even had to eschew even such *fundamentals* of
> the C environment, then the least we can do is provide a *correct* one:
> 
> diff --git a/CryptoPkg/Library/BaseCryptLib/SysCall/BaseMemAllocation.c 
> b/CryptoPkg/Library/BaseCryptLib/SysCall/BaseMemAllocation.c
> index 544f072..7c7818a 100644
> --- a/CryptoPkg/Library/BaseCryptLib/SysCall/BaseMemAllocation.c
> +++ b/CryptoPkg/Library/BaseCryptLib/SysCall/BaseMemAllocation.c
> @@ -38,5 +38,6 @@ void *realloc (void *ptr, size_t size)
>  /* De-allocates or frees a memory block */
>  void free (void *ptr)
>  {
> -  FreePool (ptr);
> +  if (ptr)
> +    FreePool (ptr);
>  }
> 

I started composing my other email before yours arrived, and finished
and sent it after yours arrived, it looks like :)

So yes, this is all. Can I take credit for the analysis, by submitting
the patch? :)

Thanks
Laszlo
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to