Commit fd93a79999c728dd1f30bb2e726ce12bdf704e6d

Authored by Paul Brook
1 parent bdb11366

Fix elf loader range checking

The ELF loader tracks the range of addresses used by a binary.
However this incorrectly assumes zero is not a valid address.

Signed-off-by: Paul Brook <paul@codesourcery.com>
Showing 1 changed file with 3 additions and 3 deletions
elf_ops.h
@@ -185,7 +185,7 @@ static int glue(load_elf, SZ)(int fd, int64_t address_offset, @@ -185,7 +185,7 @@ static int glue(load_elf, SZ)(int fd, int64_t address_offset,
185 struct elf_phdr *phdr = NULL, *ph; 185 struct elf_phdr *phdr = NULL, *ph;
186 int size, i, total_size; 186 int size, i, total_size;
187 elf_word mem_size; 187 elf_word mem_size;
188 - uint64_t addr, low = 0, high = 0; 188 + uint64_t addr, low = (uint64_t)-1, high = 0;
189 uint8_t *data = NULL; 189 uint8_t *data = NULL;
190 190
191 if (read(fd, &ehdr, sizeof(ehdr)) != sizeof(ehdr)) 191 if (read(fd, &ehdr, sizeof(ehdr)) != sizeof(ehdr))
@@ -249,9 +249,9 @@ static int glue(load_elf, SZ)(int fd, int64_t address_offset, @@ -249,9 +249,9 @@ static int glue(load_elf, SZ)(int fd, int64_t address_offset,
249 cpu_physical_memory_write_rom(addr, data, mem_size); 249 cpu_physical_memory_write_rom(addr, data, mem_size);
250 250
251 total_size += mem_size; 251 total_size += mem_size;
252 - if (!low || addr < low) 252 + if (addr < low)
253 low = addr; 253 low = addr;
254 - if (!high || (addr + mem_size) > high) 254 + if ((addr + mem_size) > high)
255 high = addr + mem_size; 255 high = addr + mem_size;
256 256
257 qemu_free(data); 257 qemu_free(data);