[efi] Remove userptr_t from EFI PE image parsing

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2025-04-25 00:49:27 +01:00
parent 338cebfeef
commit 4cca1cadf8

View File

@@ -422,42 +422,40 @@ static int efi_pe_image_probe ( struct image *image ) {
const UINT16 magic = ( ( sizeof ( UINTN ) == sizeof ( uint32_t ) ) ? const UINT16 magic = ( ( sizeof ( UINTN ) == sizeof ( uint32_t ) ) ?
EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC : EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC :
EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC ); EFI_IMAGE_NT_OPTIONAL_HDR64_MAGIC );
union { const EFI_IMAGE_DOS_HEADER *dos;
EFI_IMAGE_DOS_HEADER dos; const EFI_IMAGE_OPTIONAL_HEADER_UNION *pe;
EFI_IMAGE_OPTIONAL_HEADER_UNION pe;
} u;
/* Check for existence of DOS header */ /* Check for existence of DOS header */
if ( image->len < sizeof ( u.dos ) ) { if ( image->len < sizeof ( *dos ) ) {
DBGC ( image, "EFIIMAGE %s too short for DOS header\n", DBGC ( image, "EFIIMAGE %s too short for DOS header\n",
image->name ); image->name );
return -ENOEXEC; return -ENOEXEC;
} }
copy_from_user ( &u.dos, image->data, 0, sizeof ( u.dos ) ); dos = image->data;
if ( u.dos.e_magic != EFI_IMAGE_DOS_SIGNATURE ) { if ( dos->e_magic != EFI_IMAGE_DOS_SIGNATURE ) {
DBGC ( image, "EFIIMAGE %s missing MZ signature\n", DBGC ( image, "EFIIMAGE %s missing MZ signature\n",
image->name ); image->name );
return -ENOEXEC; return -ENOEXEC;
} }
/* Check for existence of PE header */ /* Check for existence of PE header */
if ( ( image->len < u.dos.e_lfanew ) || if ( ( image->len < dos->e_lfanew ) ||
( ( image->len - u.dos.e_lfanew ) < sizeof ( u.pe ) ) ) { ( ( image->len - dos->e_lfanew ) < sizeof ( *pe ) ) ) {
DBGC ( image, "EFIIMAGE %s too short for PE header\n", DBGC ( image, "EFIIMAGE %s too short for PE header\n",
image->name ); image->name );
return -ENOEXEC; return -ENOEXEC;
} }
copy_from_user ( &u.pe, image->data, u.dos.e_lfanew, sizeof ( u.pe ) ); pe = ( image->data + dos->e_lfanew );
if ( u.pe.Pe32.Signature != EFI_IMAGE_NT_SIGNATURE ) { if ( pe->Pe32.Signature != EFI_IMAGE_NT_SIGNATURE ) {
DBGC ( image, "EFIIMAGE %s missing PE signature\n", DBGC ( image, "EFIIMAGE %s missing PE signature\n",
image->name ); image->name );
return -ENOEXEC; return -ENOEXEC;
} }
/* Check PE header magic */ /* Check PE header magic */
if ( u.pe.Pe32.OptionalHeader.Magic != magic ) { if ( pe->Pe32.OptionalHeader.Magic != magic ) {
DBGC ( image, "EFIIMAGE %s incorrect magic %04x\n", DBGC ( image, "EFIIMAGE %s incorrect magic %04x\n",
image->name, u.pe.Pe32.OptionalHeader.Magic ); image->name, pe->Pe32.OptionalHeader.Magic );
return -ENOEXEC; return -ENOEXEC;
} }