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 <peter.maydell@linaro.org>
---
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
On 08/07/2017 11:39 AM, Peter Maydell 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 <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> 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;
>
Tested-by: Hua Yanghao <huayanghao@gmail.com>
On Mon, Aug 7, 2017 at 4:39 PM, Peter Maydell <peter.maydell@linaro.org> 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 <peter.maydell@linaro.org>
> ---
> 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
>
On 08/07/2017 07:39 AM, Peter Maydell 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 <peter.maydell@linaro.org> > --- > include/hw/elf_ops.h | 24 +++++++++++++++++------- > 1 file changed, 17 insertions(+), 7 deletions(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
© 2016 - 2026 Red Hat, Inc.