mirror of
https://github.com/acidanthera/audk.git
synced 2025-09-23 09:47:44 +02:00
ImageTool: Distinguish between non-ELF/PE and incompatible ELF/PE
This commit is contained in:
parent
1fc65bdb8d
commit
75fcd420f6
@ -214,23 +214,23 @@ ReadElfFile (
|
||||
fprintf (stderr, "ImageTool: mEhdr->e_ident[4] = 0x%x expected 0x%x\n", mEhdr->e_ident[4], Ident[4]);
|
||||
fprintf (stderr, "ImageTool: mEhdr->e_ident[5] = 0x%x expected 0x%x\n", mEhdr->e_ident[5], Ident[5]);
|
||||
fprintf (stderr, "ImageTool: FileSize = 0x%x sizeof(*mEhdr) = 0x%lx\n", FileSize, sizeof (*mEhdr));
|
||||
return RETURN_VOLUME_CORRUPTED;
|
||||
return RETURN_UNSUPPORTED;
|
||||
}
|
||||
|
||||
if ((mEhdr->e_type != ET_EXEC) && (mEhdr->e_type != ET_DYN)) {
|
||||
fprintf (stderr, "ImageTool: ELF e_type not ET_EXEC or ET_DYN\n");
|
||||
return RETURN_UNSUPPORTED;
|
||||
return RETURN_INCOMPATIBLE_VERSION;
|
||||
}
|
||||
|
||||
#if defined(EFI_TARGET64)
|
||||
if ((mEhdr->e_machine != EM_X86_64) && (mEhdr->e_machine != EM_AARCH64)) {
|
||||
fprintf (stderr, "ImageTool: Unsupported ELF e_machine\n");
|
||||
return RETURN_UNSUPPORTED;
|
||||
return RETURN_INCOMPATIBLE_VERSION;
|
||||
}
|
||||
#elif defined(EFI_TARGET32)
|
||||
if ((mEhdr->e_machine != EM_386) && (mEhdr->e_machine != EM_ARM)) {
|
||||
fprintf (stderr, "ImageTool: Unsupported ELF e_machine\n");
|
||||
return RETURN_UNSUPPORTED;
|
||||
return RETURN_INCOMPATIBLE_VERSION;
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -809,7 +809,7 @@ ScanElf (
|
||||
default:
|
||||
fprintf (stderr, "ImageTool: Unknown ELF architecture %d\n", mEhdr->e_machine);
|
||||
free (mEhdr);
|
||||
return RETURN_UNSUPPORTED;
|
||||
return RETURN_INCOMPATIBLE_VERSION;
|
||||
}
|
||||
|
||||
mImageInfo.DebugInfo.SymbolsPath = malloc (mImageInfo.DebugInfo.SymbolsPathLen + 1);
|
||||
|
@ -24,7 +24,7 @@ PeXip (
|
||||
{
|
||||
void *Pe;
|
||||
uint32_t PeSize;
|
||||
bool Result;
|
||||
RETURN_STATUS Status;
|
||||
image_tool_image_info_t Image;
|
||||
|
||||
assert (OldName != NULL);
|
||||
@ -37,12 +37,12 @@ PeXip (
|
||||
return RETURN_ABORTED;
|
||||
}
|
||||
|
||||
Result = ToolContextConstructPe (&Image, Pe, PeSize, ModuleType);
|
||||
Status = ToolContextConstructPe (&Image, Pe, PeSize, ModuleType);
|
||||
|
||||
free (Pe);
|
||||
Pe = NULL;
|
||||
|
||||
if (!Result) {
|
||||
if (RETURN_ERROR (Status)) {
|
||||
return RETURN_ABORTED;
|
||||
}
|
||||
|
||||
|
@ -148,7 +148,7 @@ ImageConvertToXip (
|
||||
image_tool_image_info_t *Image
|
||||
);
|
||||
|
||||
bool
|
||||
RETURN_STATUS
|
||||
ToolContextConstructPe (
|
||||
OUT image_tool_image_info_t *Image,
|
||||
IN const void *File,
|
||||
|
@ -393,7 +393,7 @@ ScanPeGetHiiInfo (
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
RETURN_STATUS
|
||||
ToolContextConstructPe (
|
||||
OUT image_tool_image_info_t *Image,
|
||||
IN const void *File,
|
||||
@ -415,13 +415,12 @@ ToolContextConstructPe (
|
||||
|
||||
if (FileSize > MAX_UINT32) {
|
||||
fprintf (stderr, "ImageTool: FileSize is too huge\n");
|
||||
return false;
|
||||
return RETURN_UNSUPPORTED;
|
||||
}
|
||||
|
||||
Status = PeCoffInitializeContext (&Context, File, (UINT32)FileSize);
|
||||
if (RETURN_ERROR (Status)) {
|
||||
fprintf (stderr, "ImageTool: Could not initialise Context\n");
|
||||
return false;
|
||||
return Status;
|
||||
}
|
||||
|
||||
ImageSize = PeCoffGetSizeOfImage (&Context);
|
||||
@ -435,14 +434,14 @@ ToolContextConstructPe (
|
||||
);
|
||||
if (Destination == NULL) {
|
||||
fprintf (stderr, "ImageTool: Could not allocate Destination buffer\n");
|
||||
return false;
|
||||
return RETURN_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
Status = PeCoffLoadImage (&Context, Destination, DestinationSize);
|
||||
if (RETURN_ERROR (Status)) {
|
||||
fprintf (stderr, "ImageTool: Could not Load Image\n");
|
||||
FreeAlignedPages (Destination, DestinationPages);
|
||||
return false;
|
||||
return RETURN_VOLUME_CORRUPTED;
|
||||
}
|
||||
|
||||
memset (Image, 0, sizeof (*Image));
|
||||
@ -452,7 +451,7 @@ ToolContextConstructPe (
|
||||
fprintf (stderr, "ImageTool: Could not retrieve header info\n");
|
||||
ToolImageDestruct (Image);
|
||||
FreeAlignedPages (Destination, DestinationPages);
|
||||
return false;
|
||||
return RETURN_VOLUME_CORRUPTED;
|
||||
}
|
||||
|
||||
Result = ScanPeGetDebugInfo (&Image->DebugInfo, &Context);
|
||||
@ -460,7 +459,7 @@ ToolContextConstructPe (
|
||||
fprintf (stderr, "ImageTool: Could not retrieve debug info\n");
|
||||
ToolImageDestruct (Image);
|
||||
FreeAlignedPages (Destination, DestinationPages);
|
||||
return false;
|
||||
return RETURN_VOLUME_CORRUPTED;
|
||||
}
|
||||
|
||||
Result = ScanPeGetSegmentInfo (&Image->SegmentInfo, &Image->HiiInfo, &Context);
|
||||
@ -468,16 +467,18 @@ ToolContextConstructPe (
|
||||
fprintf (stderr, "ImageTool: Could not retrieve segment info\n");
|
||||
ToolImageDestruct (Image);
|
||||
FreeAlignedPages (Destination, DestinationPages);
|
||||
return false;
|
||||
return RETURN_VOLUME_CORRUPTED;
|
||||
}
|
||||
|
||||
Result = ScanPeGetRelocInfo (&Image->RelocInfo, &Context);
|
||||
if (!Result) {
|
||||
fprintf (stderr, "ImageTool: Could not retrieve reloc info\n");
|
||||
ToolImageDestruct (Image);
|
||||
FreeAlignedPages (Destination, DestinationPages);
|
||||
return RETURN_VOLUME_CORRUPTED;
|
||||
}
|
||||
|
||||
FreeAlignedPages (Destination, DestinationPages);
|
||||
|
||||
return Result;
|
||||
return RETURN_SUCCESS;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user