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:
		
							parent
							
								
									b430a22562
								
							
						
					
					
						commit
						3e372cf87f
					
				@ -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)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user