Fix memory leaks in ELF loader.
Regards Dirk
--- elf_ops.h_orig 2006-05-01 09:01:47.000000000 +0200 +++ elf_ops.h 2006-05-01 09:09:34.000000000 +0200 @@ -148,7 +148,7 @@ int glue(load_elf, SZ)(int fd, int64_t v uint8_t *data = NULL; if (read(fd, &ehdr, sizeof(ehdr)) != sizeof(ehdr)) - goto fail; + goto fail1; if (must_swab) { glue(bswap_ehdr, SZ)(&ehdr); } @@ -162,9 +162,9 @@ int glue(load_elf, SZ)(int fd, int64_t v lseek(fd, ehdr.e_phoff, SEEK_SET); phdr = qemu_mallocz(size); if (!phdr) - goto fail; + goto fail2; if (read(fd, phdr, size) != size) - goto fail; + goto fail2; if (must_swab) { for(i = 0; i < ehdr.e_phnum; i++) { ph = &phdr[i]; @@ -181,9 +181,9 @@ int glue(load_elf, SZ)(int fd, int64_t v data = qemu_mallocz(mem_size); if (ph->p_filesz > 0) { if (lseek(fd, ph->p_offset, SEEK_SET) < 0) - goto fail; + goto fail3; if (read(fd, data, ph->p_filesz) != ph->p_filesz) - goto fail; + goto fail3; } addr = ph->p_vaddr + virt_to_phys_addend; @@ -195,10 +195,13 @@ int glue(load_elf, SZ)(int fd, int64_t v data = NULL; } } + qemu_free(phdr); return total_size; - fail: + fail3: qemu_free(data); + fail2: qemu_free(phdr); + fail1: return -1; }
_______________________________________________ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel