From 3e372cf87fa0d9ab378c3dffed6b863bef4ed7a3 Mon Sep 17 00:00:00 2001 From: Aurelien Jarno Date: Mon, 28 Dec 2009 21:18:12 +0100 Subject: [PATCH] loader: don't call realloc(non_null, 0) when no symbols are present According to C99, realloc(non_null, 0) != free(non_null), that's why it is forbidden in QEMU. When there are no symbols, nsyms equals to 0. Free the syms structure and set it to NULL instead of reallocating it with a size of 0. This fixes -kernel with stripped kernels. Signed-off-by: Aurelien Jarno Acked-by: Michael S. Tsirkin --- hw/elf_ops.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/hw/elf_ops.h b/hw/elf_ops.h index 6093deaa73..14b9ec0444 100644 --- a/hw/elf_ops.h +++ b/hw/elf_ops.h @@ -149,9 +149,14 @@ static int glue(load_symbols, SZ)(struct elfhdr *ehdr, int fd, int must_swab, } i++; } - syms = qemu_realloc(syms, nsyms * sizeof(*syms)); + if (nsyms) { + syms = qemu_realloc(syms, nsyms * sizeof(*syms)); - qsort(syms, nsyms, sizeof(*syms), glue(symcmp, SZ)); + qsort(syms, nsyms, sizeof(*syms), glue(symcmp, SZ)); + } else { + qemu_free(syms); + syms = NULL; + } /* String table */ if (symtab->sh_link >= ehdr->e_shnum)