From 31c0046cbe18a9d47da1f7da0e872a0a2f09b669 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20Ha=CC=88user?= <8659494+mhaeuser@users.noreply.github.com> Date: Mon, 12 Jun 2023 17:46:45 +0200 Subject: [PATCH] ImageTool: Fix memory leaks --- BaseTools/ImageTool/ImageToolEmit.c | 2 ++ BaseTools/ImageTool/UefiImageScan.c | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/BaseTools/ImageTool/ImageToolEmit.c b/BaseTools/ImageTool/ImageToolEmit.c index 8f7559a6c3..ba602f2fc8 100644 --- a/BaseTools/ImageTool/ImageToolEmit.c +++ b/BaseTools/ImageTool/ImageToolEmit.c @@ -166,6 +166,7 @@ ToolImageEmit ( if (OutputFile == NULL) { DEBUG_RAISE (); + ToolImageDestruct (&ImageInfo); return NULL; } @@ -175,6 +176,7 @@ ToolImageEmit ( if (EFI_ERROR (Status)) { assert (false); + FreePool (OutputFile); return NULL; } diff --git a/BaseTools/ImageTool/UefiImageScan.c b/BaseTools/ImageTool/UefiImageScan.c index a07b92ac23..9a209c8057 100644 --- a/BaseTools/ImageTool/UefiImageScan.c +++ b/BaseTools/ImageTool/UefiImageScan.c @@ -238,6 +238,7 @@ ToolContextConstructUefiImage ( Success = ScanUefiImageGetHeaderInfo (&Image->HeaderInfo, &Context); if (!Success) { fprintf (stderr, "ImageTool: Could not retrieve header info\n"); + ToolImageDestruct (Image); FreeAlignedPages (Destination, DestinationPages); return RETURN_VOLUME_CORRUPTED; } @@ -245,6 +246,7 @@ ToolContextConstructUefiImage ( Success = ScanUefiImageGetSegmentInfo (&Image->SegmentInfo, &Context); if (!Success) { fprintf (stderr, "ImageTool: Could not retrieve segment info\n"); + ToolImageDestruct (Image); FreeAlignedPages (Destination, DestinationPages); return RETURN_VOLUME_CORRUPTED; } @@ -252,6 +254,7 @@ ToolContextConstructUefiImage ( Success = ScanUefiImageGetRelocInfo (&Image->RelocInfo, &Context); if (!Success) { fprintf (stderr, "ImageTool: Could not retrieve reloc info\n"); + ToolImageDestruct (Image); FreeAlignedPages (Destination, DestinationPages); return RETURN_VOLUME_CORRUPTED; } @@ -259,6 +262,7 @@ ToolContextConstructUefiImage ( Success = ScanUefiImageGetHiiInfo (&Image->HiiInfo, &Context); if (!Success) { fprintf (stderr, "ImageTool: Could not retrieve HII info\n"); + ToolImageDestruct (Image); FreeAlignedPages (Destination, DestinationPages); return RETURN_VOLUME_CORRUPTED; } @@ -266,6 +270,7 @@ ToolContextConstructUefiImage ( Success = ScanUefiImageGetDebugInfo (&Image->DebugInfo, &Context); if (!Success) { fprintf (stderr, "ImageTool: Could not retrieve debug info\n"); + ToolImageDestruct (Image); FreeAlignedPages (Destination, DestinationPages); return RETURN_VOLUME_CORRUPTED; }