The decision to process a compressed image should be part of the image specific detection logic. As such lets clarify the return logic, and remove the is_zlib_file() logic in the main file type detection loop. Signed-off-by: Jeremy Linton <jeremy.linton@xxxxxxx> --- kexec/arch/arm64/kexec-arm64.c | 6 ++++++ kexec/arch/arm64/kexec-elf-arm64.c | 1 + kexec/kexec.c | 11 ++++------- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/kexec/arch/arm64/kexec-arm64.c b/kexec/arch/arm64/kexec-arm64.c index ec6df4b..a36c103 100644 --- a/kexec/arch/arm64/kexec-arm64.c +++ b/kexec/arch/arm64/kexec-arm64.c @@ -70,6 +70,12 @@ const struct arch_map_entry arches[] = { { NULL, 0 }, }; +/* + * All arm probe routines must return: + * -1 for invalid image + * 0 valid image in buffer + * >0 fd of valid image after decompression + */ struct file_type file_type[] = { {"vmlinux", elf_arm64_probe, elf_arm64_load, elf_arm64_usage}, {"Image", image_arm64_probe, image_arm64_load, image_arm64_usage}, diff --git a/kexec/arch/arm64/kexec-elf-arm64.c b/kexec/arch/arm64/kexec-elf-arm64.c index e14f8e9..3b7e391 100644 --- a/kexec/arch/arm64/kexec-elf-arm64.c +++ b/kexec/arch/arm64/kexec-elf-arm64.c @@ -25,6 +25,7 @@ int elf_arm64_probe(const char *kernel_buf, off_t kernel_size) if (result < 0) { dbgprintf("%s: Not an ELF executable.\n", __func__); + result = -1; goto on_exit; } diff --git a/kexec/kexec.c b/kexec/kexec.c index 36bb2ad..97b7226 100644 --- a/kexec/kexec.c +++ b/kexec/kexec.c @@ -1303,14 +1303,11 @@ static int do_kexec_file_load(int fileind, int argc, char **argv, for (i = 0; i < file_types; i++) { #ifdef __aarch64__ /* handle Image.gz like cases */ - if (is_zlib_file(kernel, &kernel_size)) { - if ((ret = file_type[i].probe(kernel, kernel_size)) >= 0) { + if ((ret = file_type[i].probe(kernel_buf, kernel_size)) >= 0) { + if (ret > 0) kernel_fd = ret; - break; - } - } else - if (file_type[i].probe(kernel_buf, kernel_size) >= 0) - break; + break; + } #else if (file_type[i].probe(kernel_buf, kernel_size) >= 0) break; -- 2.40.0 _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec