|
From: Madhu M. K. <mm...@ya...> - 2005-05-24 09:39:58
|
Sending this for completeness, not sure if it needs to be applied.
--- valgrind.orig/coregrind/ume.c 2005-05-21 00:31:56.000000000 -0700
+++ valgrind/coregrind/ume.c 2005-05-24 01:39:27.337152534 -0700
@@ -153,34 +153,41 @@
if (pread(fd, &e->e, sizeof(e->e), 0) != sizeof(e->e)) {
fprintf(stderr, "valgrind: %s: can't read elf header: %s\n",
filename, strerror(errno));
+ free(e);
return NULL;
}
if (memcmp(&e->e.e_ident[0], ELFMAG, SELFMAG) != 0) {
fprintf(stderr, "valgrind: %s: bad ELF magic\n", filename);
+ free(e);
return NULL;
}
if (e->e.e_ident[EI_CLASS] != VG_ELF_CLASS) {
fprintf(stderr, "valgrind: wrong executable class (eg. 32-bit
instead\n"
"valgrind: of 64-bit)\n");
+ free(e);
return NULL;
}
if (e->e.e_ident[EI_DATA] != VG_ELF_ENDIANNESS) {
fprintf(stderr, "valgrind: wrong endian-ness\n");
+ free(e);
return NULL;
}
if (!(e->e.e_type == ET_EXEC || e->e.e_type == ET_DYN)) {
fprintf(stderr, "valgrind: need executable\n");
+ free(e);
return NULL;
}
if (e->e.e_machine != VG_ELF_MACHINE) {
fprintf(stderr, "valgrind: wrong architecture\n");
+ free(e);
return NULL;
}
if (e->e.e_phentsize != sizeof(ESZ(Phdr))) {
fprintf(stderr, "valgrind: sizeof Phdr wrong\n");
+ free(e);
return NULL;
}
@@ -190,6 +197,7 @@
if (pread(fd, e->p, phsz, e->e.e_phoff) != phsz) {
fprintf(stderr, "valgrind: can't read phdr: %s\n", strerror(errno));
+ free(e);
return NULL;
}
@@ -387,14 +395,17 @@
"acceptable range %p-%p\n",
(void *)minaddr + ebase, (void *)maxaddr + ebase,
(void *)info->exe_base, (void *)info->exe_end);
+ free(e);
return ENOMEM;
}
}
info->brkbase = mapelf(e, ebase); /* map the executable */
- if (info->brkbase == 0)
+ if (info->brkbase == 0) {
+ free(e);
return ENOMEM;
+ }
if (interp != NULL) {
/* reserve a chunk of address space for interpreter */
Cheerio,
M
Madhu M Kurup /* Nemo Me Impune Lacessit */ mmk at yahoo-inc dt com
|