[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 2/2] loader: Ignore zero-sized ELF segments
From: |
Hua Yanghao |
Subject: |
Re: [Qemu-devel] [PATCH 2/2] loader: Ignore zero-sized ELF segments |
Date: |
Tue, 8 Aug 2017 10:18:47 +0200 |
Tested-by: Hua Yanghao <address@hidden>
On Mon, Aug 7, 2017 at 4:39 PM, Peter Maydell <address@hidden> wrote:
> Some ELF files have program headers that specify segments that
> are of zero size. Ignore them, rather than trying to create
> zero-length ROM blobs for them, because the zero-length blob
> can falsely trigger the overlapping-ROM-blobs check.
>
> Signed-off-by: Peter Maydell <address@hidden>
> ---
> include/hw/elf_ops.h | 24 +++++++++++++++++-------
> 1 file changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h
> index 2e526d3..d192e7e 100644
> --- a/include/hw/elf_ops.h
> +++ b/include/hw/elf_ops.h
> @@ -451,14 +451,24 @@ static int glue(load_elf, SZ)(const char *name, int fd,
> *pentry = ehdr.e_entry - ph->p_vaddr + ph->p_paddr;
> }
>
> - if (load_rom) {
> - snprintf(label, sizeof(label), "phdr #%d: %s", i, name);
> -
> - /* rom_add_elf_program() seize the ownership of 'data' */
> - rom_add_elf_program(label, data, file_size, mem_size, addr,
> as);
> - } else {
> - cpu_physical_memory_write(addr, data, file_size);
> + if (mem_size == 0) {
> + /* Some ELF files really do have segments of zero size;
> + * just ignore them rather than trying to create empty
> + * ROM blobs, because the zero-length blob can falsely
> + * trigger the overlapping-ROM-blobs check.
> + */
> g_free(data);
> + } else {
> + if (load_rom) {
> + snprintf(label, sizeof(label), "phdr #%d: %s", i, name);
> +
> + /* rom_add_elf_program() seize the ownership of 'data' */
> + rom_add_elf_program(label, data, file_size, mem_size,
> + addr, as);
> + } else {
> + cpu_physical_memory_write(addr, data, file_size);
> + g_free(data);
> + }
> }
>
> total_size += mem_size;
> --
> 2.7.4
>