From b3d23709099d6c8c14713e39773ebfc9b17c146c Mon Sep 17 00:00:00 2001 From: Guennadi Liakhovetski Date: Wed, 10 Apr 2024 16:21:05 +0200 Subject: [PATCH] rimage: add support for relocatable objects Relocatable ELF objects don't contain segments, update rimage to prevent it from aborting in such cases. Signed-off-by: Guennadi Liakhovetski --- tools/rimage/src/elf_file.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/tools/rimage/src/elf_file.c b/tools/rimage/src/elf_file.c index 7415a35c228a..991766d45062 100644 --- a/tools/rimage/src/elf_file.c +++ b/tools/rimage/src/elf_file.c @@ -132,15 +132,6 @@ static int elf_header_read(struct elf_file *elf) if (elf->header.ehsize < sizeof(Elf32_Ehdr)) return elf_error(elf, "Invalid file header size.", EINVAL); - if (elf->header.phoff >= elf->file_size) - return elf_error(elf, "Invalid program header file offset.", EINVAL); - - if (elf->header.phentsize < sizeof(Elf32_Phdr)) - return elf_error(elf, "Invalid program header size.", EINVAL); - - if (elf->header.phoff + elf->header.phnum * sizeof(Elf32_Phdr) > elf->file_size) - return elf_error(elf, "Invalid number of program header entries.", EINVAL); - if (elf->header.shoff >= elf->file_size) return elf_error(elf, "Invalid section header file offset.", EINVAL); @@ -250,6 +241,12 @@ static int elf_program_headers_read(struct elf_file *elf) int i, ret; size_t offset, count; + if (!elf->header.phnum) { + elf->programs = NULL; + elf->programs_count = 0; + return 0; + } + elf->programs = calloc(elf->header.phnum, sizeof(Elf32_Phdr)); if (!elf->programs) return elf_error(elf, "Cannot allocate program array.", ENOMEM);