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 <aurelien@aurel32.net> Acked-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
		| @@ -149,9 +149,14 @@ static int glue(load_symbols, SZ)(struct elfhdr *ehdr, int fd, int must_swab, | |||||||
|         } |         } | ||||||
|         i++; |         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 */ |     /* String table */ | ||||||
|     if (symtab->sh_link >= ehdr->e_shnum) |     if (symtab->sh_link >= ehdr->e_shnum) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user