The ISO C standard says about free(), If ptr is a null pointer, no action occurs.
This is not true of the RuntimeFreeMem() internal function. Therefore we must not forward the argument of free() to RuntimeFreeMem() without checking. Cc: David Woodhouse <[email protected]> Cc: Qin Long <[email protected]> Cc: Ting Ye <[email protected]> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <[email protected]> --- CryptoPkg/Library/BaseCryptLib/SysCall/RuntimeMemAllocation.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CryptoPkg/Library/BaseCryptLib/SysCall/RuntimeMemAllocation.c b/CryptoPkg/Library/BaseCryptLib/SysCall/RuntimeMemAllocation.c index 616ee7717e72..45ef9ff5f252 100644 --- a/CryptoPkg/Library/BaseCryptLib/SysCall/RuntimeMemAllocation.c +++ b/CryptoPkg/Library/BaseCryptLib/SysCall/RuntimeMemAllocation.c @@ -434,5 +434,11 @@ void *realloc (void *ptr, size_t size) /* Deallocates or frees a memory block */ void free (void *ptr) { - RuntimeFreeMem (ptr); + // + // In Standard C, free() handles a null pointer argument transparently. This + // is not true of RuntimeFreeMem() below, so protect it. + // + if (ptr != NULL) { + RuntimeFreeMem (ptr); + } } -- 1.8.3.1 _______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

