Commit 3e372cf8 authored by Aurelien Jarno's avatar Aurelien Jarno
Browse files

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: default avatarAurelien Jarno <aurelien@aurel32.net>
Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent b430a225
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -149,9 +149,14 @@ static int glue(load_symbols, SZ)(struct elfhdr *ehdr, int fd, int must_swab,
        }
        i++;
    }
    if (nsyms) {
        syms = qemu_realloc(syms, nsyms * sizeof(*syms));

        qsort(syms, nsyms, sizeof(*syms), glue(symcmp, SZ));
    } else {
        qemu_free(syms);
        syms = NULL;
    }

    /* String table */
    if (symtab->sh_link >= ehdr->e_shnum)