From 6623dd8671c317c5ad1a97c1b7f6ad13b00a52e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20Ha=CC=88user?= <8659494+mhaeuser@users.noreply.github.com> Date: Mon, 10 Apr 2023 19:44:22 +0200 Subject: [PATCH] ImageTool: Error when encountering unknown ELF SHF_ALLOC sections --- BaseTools/ImageTool/ElfScan.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/BaseTools/ImageTool/ElfScan.c b/BaseTools/ImageTool/ElfScan.c index b6b9081861..88b23c82d9 100644 --- a/BaseTools/ImageTool/ElfScan.c +++ b/BaseTools/ImageTool/ElfScan.c @@ -699,9 +699,7 @@ CreateIntermediate ( Segments[SIndex].Type = ToolImageSectionTypeCode; ++SIndex; continue; - } - - if (IsDataShdr (Shdr)) { + } else if (IsDataShdr (Shdr)) { Name = GetString (Shdr->sh_name, 0); if (Name == NULL) { return RETURN_VOLUME_CORRUPTED; @@ -735,9 +733,7 @@ CreateIntermediate ( Segments[SIndex].Type = ToolImageSectionTypeInitialisedData; ++SIndex; continue; - } - - if (IsHiiRsrcShdr (Shdr)) { + } else if (IsHiiRsrcShdr (Shdr)) { mImageInfo.HiiInfo.DataSize = (uint32_t)ALIGN_VALUE (Shdr->sh_size, mPeAlignment); mImageInfo.HiiInfo.Data = calloc (1, mImageInfo.HiiInfo.DataSize); @@ -750,6 +746,9 @@ CreateIntermediate ( memcpy (mImageInfo.HiiInfo.Data, (UINT8 *)mEhdr + Shdr->sh_offset, (size_t)Shdr->sh_size); SetHiiResourceHeader (mImageInfo.HiiInfo.Data, (UINT32)Shdr->sh_addr); } + } else if ((Shdr->sh_flags & SHF_ALLOC) != 0) { + fprintf (stderr, "ImageTool: Unknown SHF_ALLOC Section %d\n", SIndex); + return RETURN_UNSUPPORTED; } }