Signed-off-by: Zhaofeng Li <hello@xxxxxxxxxxx> --- kexec/arch/i386/kexec-mb2-x86.c | 34 ++++++++++++++++++++++++++++++-- kexec/arch/x86_64/kexec-x86_64.c | 4 ++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/kexec/arch/i386/kexec-mb2-x86.c b/kexec/arch/i386/kexec-mb2-x86.c index 49fcc2d..31b4ce1 100644 --- a/kexec/arch/i386/kexec-mb2-x86.c +++ b/kexec/arch/i386/kexec-mb2-x86.c @@ -72,12 +72,42 @@ struct multiboot2_header_info { #define ALIGN_UP(addr, align) \ ((addr + (typeof (addr)) align - 1) & ~((typeof (addr)) align - 1)) +static const int probe_debug = 0; + +static int elf_x86_or_x64_probe(const char *buf, off_t len) +{ + struct mem_ehdr ehdr; + int result; + result = build_elf_exec_info(buf, len, &ehdr, 0); + if (result < 0) { + if (probe_debug) { + fprintf(stderr, "Not an ELF executable\n"); + } + goto out; + } + + /* Verify the architecuture specific bits */ + if ((ehdr.e_machine != EM_386) && (ehdr.e_machine != EM_486) && (ehdr.e_machine != EM_X86_64)) { + /* for a different architecture */ + if (probe_debug) { + fprintf(stderr, "Not i386 or x86_64 ELF executable\n"); + } + result = -1; + goto out; + } + result = 0; + out: + free_elf_info(&ehdr); + return result; +} + int multiboot2_x86_probe(const char *buf, off_t buf_len) /* Is it a good idea to try booting this file? */ { int i, len; - /* First of all, check that this is an ELF file */ - if ((i=elf_x86_probe(buf, buf_len)) < 0) + + /* First of all, check that this is an ELF file for either x86 or x86-64 */ + if ((i=elf_x86_or_x64_probe(buf, buf_len)) < 0) return i; /* Now look for a multiboot header. */ diff --git a/kexec/arch/x86_64/kexec-x86_64.c b/kexec/arch/x86_64/kexec-x86_64.c index 394cfca..ffd84f0 100644 --- a/kexec/arch/x86_64/kexec-x86_64.c +++ b/kexec/arch/x86_64/kexec-x86_64.c @@ -33,11 +33,11 @@ #include <arch/options.h> struct file_type file_type[] = { + { "multiboot2-x86", multiboot2_x86_probe, multiboot2_x86_load, + multiboot2_x86_usage }, { "elf-x86_64", elf_x86_64_probe, elf_x86_64_load, elf_x86_64_usage }, { "multiboot-x86", multiboot_x86_probe, multiboot_x86_load, multiboot_x86_usage }, - { "multiboot2-x86", multiboot2_x86_probe, multiboot2_x86_load, - multiboot2_x86_usage }, { "elf-x86", elf_x86_probe, elf_x86_load, elf_x86_usage }, { "bzImage64", bzImage64_probe, bzImage64_load, bzImage64_usage }, { "bzImage", bzImage_probe, bzImage_load, bzImage_usage }, -- 2.32.0 _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec