1
0
mirror of https://github.com/openbsd/src.git synced 2025-01-03 06:45:37 -08:00

This patch ensure that when an error is detected, the freed variables in

elf_symloadx() are reinitialised.

Else show_file() in nm.c will used these variables, even if they has
just been freed. (nm.c +689).

Problem found by afl.

ok miod@
This commit is contained in:
semarie 2015-06-23 15:16:34 +00:00
parent 8e73cb8c24
commit c4fd534d31
2 changed files with 9 additions and 2 deletions

View File

@ -1,4 +1,4 @@
/* $OpenBSD: elf.c,v 1.31 2015/06/23 15:13:29 semarie Exp $ */
/* $OpenBSD: elf.c,v 1.32 2015/06/23 15:16:34 semarie Exp $ */
/*
* Copyright (c) 2003 Michael Shalayeff
@ -498,6 +498,7 @@ elf_symloadx(const char *name, FILE *fp, off_t foff, Elf_Ehdr *eh,
warn("%s: malloc names", name);
if (stab)
MUNMAP(stab, *pstabsize);
*pnrawnames = 0;
return (1);
}
if ((*psnames = calloc(*pnrawnames, sizeof(np))) == NULL) {
@ -505,6 +506,8 @@ elf_symloadx(const char *name, FILE *fp, off_t foff, Elf_Ehdr *eh,
if (stab)
MUNMAP(stab, *pstabsize);
free(*pnames);
*pnames = NULL;
*pnrawnames = 0;
return (1);
}
@ -516,6 +519,9 @@ elf_symloadx(const char *name, FILE *fp, off_t foff, Elf_Ehdr *eh,
MUNMAP(stab, *pstabsize);
free(*pnames);
free(*psnames);
*pnames = NULL;
*psnames = NULL;
*pnrawnames = 0;
return (1);
}

View File

@ -1,4 +1,4 @@
/* $OpenBSD: util.h,v 1.3 2015/05/17 20:19:08 guenther Exp $ */
/* $OpenBSD: util.h,v 1.4 2015/06/23 15:16:34 semarie Exp $ */
/*
* Placed in the public domain by Todd C. Miller <Todd.Miller@courtesan.com>
@ -26,6 +26,7 @@
munmap(addr, len); \
else \
free(addr); \
addr = NULL; \
} while (0)
extern int usemmap;