[U-Boot] [PATCH v2] efi_loader: Check machine type in the image header

Alexander Graf agraf at suse.de
Thu Apr 5 23:23:44 UTC 2018



On 06.04.18 01:03, Heinrich Schuchardt wrote:
> On 04/06/2018 12:43 AM, Alexander Graf wrote:
>>
>>
>> On 05.04.18 23:28, Ivan Gorinov wrote:
>>> Check FileHeader.Machine to make sure the EFI executable image is built
>>> for the same architecture. For example, 32-bit U-Boot on x86 will print
>>> an error message instead of loading an x86_64 image and crashing.
>>>
>>> Signed-off-by: Ivan Gorinov <ivan.gorinov at intel.com>
>>> ---
>>>  include/pe.h                      | 24 ++++++++++++++++++++++++
>>>  lib/efi_loader/efi_image_loader.c | 24 ++++++++++++------------
>>>  2 files changed, 36 insertions(+), 12 deletions(-)
>>>
>>> diff --git a/include/pe.h b/include/pe.h
>>> index c3a19ce..0dc33f0 100644
>>> --- a/include/pe.h
>>> +++ b/include/pe.h
>>> @@ -38,11 +38,35 @@ typedef struct _IMAGE_DOS_HEADER {
>>>  #define IMAGE_DOS_SIGNATURE		0x5A4D     /* MZ   */
>>>  #define IMAGE_NT_SIGNATURE		0x00004550 /* PE00 */
>>>  
>>> +#define IMAGE_FILE_MACHINE_I386		0x014c
>>>  #define IMAGE_FILE_MACHINE_ARM		0x01c0
>>>  #define IMAGE_FILE_MACHINE_THUMB	0x01c2
>>>  #define IMAGE_FILE_MACHINE_ARMNT	0x01c4
>>>  #define IMAGE_FILE_MACHINE_AMD64	0x8664
>>>  #define IMAGE_FILE_MACHINE_ARM64	0xaa64
>>> +#define IMAGE_FILE_MACHINE_RISCV32	0x5032
>>> +#define IMAGE_FILE_MACHINE_RISCV64	0x5064
>>> +
>>> +#if defined(CONFIG_ARM64)
>>> +#define TARGET_PE_MACHINE_TYPE IMAGE_FILE_MACHINE_ARM64
>>> +#elif defined(CONFIG_ARM)
>>> +#define TARGET_PE_MACHINE_TYPE IMAGE_FILE_MACHINE_THUMB
>>
>> Are you sure we always have thumb as machine type here? Aren't we
>> compatible with either ARM or THUMB?
> 
> The value 0x01c2 means ARM or THUMB
> It is used by Linux, GRUB, iPXE.

I'm not sure that's fully accurate. ARM means some old legacy one, but
ARMNT and THUMB can both be used, no?

  https://www.npmjs.com/package/binarycpu

What I'm trying to say is that a 1:1 matching might not be the only
thing we want.


Alex


More information about the U-Boot mailing list