linux-user: Fix possible realloc memory leak

Extract from "man realloc":
"If realloc() fails the original block is left untouched;
it is not freed or moved."

Fix a possible memory leak (reported by cppcheck).

Cc: Riku Voipio <riku.voipio@iki.fi>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
Signed-off-by: Riku Voipio <riku.voipio@nokia.com>
This commit is contained in:
Stefan Weil 2011-01-17 21:36:06 +01:00 committed by Riku Voipio
parent 6672b0b22a
commit 8d79de6e42

View File

@ -1481,7 +1481,7 @@ static void load_symbols(struct elfhdr *hdr, int fd, abi_ulong load_bias)
struct elf_shdr *shdr; struct elf_shdr *shdr;
char *strings; char *strings;
struct syminfo *s; struct syminfo *s;
struct elf_sym *syms; struct elf_sym *syms, *new_syms;
shnum = hdr->e_shnum; shnum = hdr->e_shnum;
i = shnum * sizeof(struct elf_shdr); i = shnum * sizeof(struct elf_shdr);
@ -1550,12 +1550,14 @@ static void load_symbols(struct elfhdr *hdr, int fd, abi_ulong load_bias)
that we threw away. Whether or not this has any effect on the that we threw away. Whether or not this has any effect on the
memory allocation depends on the malloc implementation and how memory allocation depends on the malloc implementation and how
many symbols we managed to discard. */ many symbols we managed to discard. */
syms = realloc(syms, nsyms * sizeof(*syms)); new_syms = realloc(syms, nsyms * sizeof(*syms));
if (syms == NULL) { if (new_syms == NULL) {
free(s); free(s);
free(syms);
free(strings); free(strings);
return; return;
} }
syms = new_syms;
qsort(syms, nsyms, sizeof(*syms), symcmp); qsort(syms, nsyms, sizeof(*syms), symcmp);