From 9dd00cb66e3e4a4be38068ef9700137ac6c0fb3f Mon Sep 17 00:00:00 2001 From: Hao Wu Date: Tue, 11 Oct 2016 10:40:49 +0800 Subject: [PATCH] BaseTools/VolInfo: Avoid possible NULL pointer dereference Cc: Liming Gao Cc: Yonghong Zhu Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu Reviewed-by: Liming Gao --- BaseTools/Source/C/VolInfo/VolInfo.c | 46 +++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/BaseTools/Source/C/VolInfo/VolInfo.c b/BaseTools/Source/C/VolInfo/VolInfo.c index 3a2686a58f..1ea2f49e0c 100644 --- a/BaseTools/Source/C/VolInfo/VolInfo.c +++ b/BaseTools/Source/C/VolInfo/VolInfo.c @@ -265,6 +265,10 @@ Returns: OpenSslPath = OpenSslCommand; } else { OpenSslPath = malloc(strlen(OpenSslEnv)+strlen(OpenSslCommand)+1); + if (OpenSslPath == NULL) { + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!"); + return GetUtilityStatus (); + } CombinePath(OpenSslEnv, OpenSslCommand, OpenSslPath); } if (OpenSslPath == NULL){ @@ -1623,9 +1627,11 @@ Returns: SectionHeaderLen = GetSectionHeaderLength((EFI_COMMON_SECTION_HEADER *)Ptr); SectionName = SectionNameToStr (Type); - printf ("------------------------------------------------------------\n"); - printf (" Type: %s\n Size: 0x%08X\n", SectionName, (unsigned) SectionLength); - free (SectionName); + if (SectionName != NULL) { + printf ("------------------------------------------------------------\n"); + printf (" Type: %s\n Size: 0x%08X\n", SectionName, (unsigned) SectionLength); + free (SectionName); + } switch (Type) { case EFI_SECTION_RAW: @@ -1653,6 +1659,10 @@ Returns: strlen (ToolOutputFileName) + 1 ); + if (SystemCommand == NULL) { + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!"); + return EFI_OUT_OF_RESOURCES; + } sprintf ( SystemCommand, SystemCommandFormatString, @@ -1678,12 +1688,18 @@ Returns: nFileLen = ftell(fp); fseek(fp,0,SEEK_SET); StrLine = malloc(nFileLen); + if (StrLine == NULL) { + fclose(fp); + free (SystemCommand); + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!"); + return EFI_OUT_OF_RESOURCES; + } fgets(StrLine, nFileLen, fp); NewStr = strrchr (StrLine, '='); printf (" SHA1: %s\n", NewStr + 1); free (StrLine); + fclose(fp); } - fclose(fp); } remove(ToolInputFileName); remove(ToolOutputFileName); @@ -1845,6 +1861,19 @@ Returns: close(fd2); #endif + if ((ToolInputFile == NULL) || (ToolOutputFile == NULL)) { + if (ToolInputFile != NULL) { + free (ToolInputFile); + } + if (ToolOutputFile != NULL) { + free (ToolOutputFile); + } + free (ExtractionTool); + + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!"); + return EFI_OUT_OF_RESOURCES; + } + // // Construction 'system' command string // @@ -1856,6 +1885,14 @@ Returns: strlen (ToolOutputFile) + 1 ); + if (SystemCommand == NULL) { + free (ToolInputFile); + free (ToolOutputFile); + free (ExtractionTool); + + Error (NULL, 0, 4001, "Resource", "memory cannot be allocated!"); + return EFI_OUT_OF_RESOURCES; + } sprintf ( SystemCommand, SystemCommandFormatString, @@ -1884,6 +1921,7 @@ Returns: ); remove (ToolOutputFile); free (ToolOutputFile); + free (SystemCommand); if (EFI_ERROR (Status)) { Error (NULL, 0, 0004, "unable to read decoded GUIDED section", NULL); return EFI_SECTION_ERROR; -- 2.39.2