Index: src/trusted/validator/ncfileutil.c |
diff --git a/src/trusted/validator/ncfileutil.c b/src/trusted/validator/ncfileutil.c |
index bb7e6279fe31ab0e95d20dd704176651c1394afb..9bca72ce4cce8c8cb3449c0412954a8e17fad6eb 100644 |
--- a/src/trusted/validator/ncfileutil.c |
+++ b/src/trusted/validator/ncfileutil.c |
@@ -186,6 +186,15 @@ static int nc_load(ncfile *ncf, int fd) { |
return -1; |
} |
+ /* Keep a copy of the header around for the validator */ |
+ ncf->eheader = calloc(1, sizeof(Elf_Ehdr)); |
+ if (ncf->eheader == NULL) { |
+ ncf->error_fn("nc_load(%s): calloc(1, sizeof(Elf_Ehdr)) failed\n", |
+ ncf->fname); |
+ return -1; |
+ } |
+ memcpy(ncf->eheader, &h, sizeof(Elf_Ehdr)); |
bsy
2011/09/21 22:32:17
*ncf->eheader = h; is clearer.
jasonwkim
2011/09/26 21:35:52
done
|
+ |
/* success! */ |
return 0; |
} |
@@ -212,7 +221,7 @@ ncfile *nc_loadfile_depending(const char *filename, |
if (nc_load(ncf, fd) < 0) { |
close(fd); |
- free(ncf); |
+ nc_freefile(ncf); |
return NULL; |
} |
close(fd); |
@@ -230,7 +239,10 @@ ncfile *nc_loadfile_with_error_fn(const char *filename, |
void nc_freefile(ncfile *ncf) { |
- if (ncf->data != NULL) free(ncf->data); |
+ if (ncf->data != NULL) free(ncf->data); |
bsy
2011/09/21 22:32:17
NULL check is not needed, since free(NULL) is defi
jasonwkim
2011/09/26 21:35:52
fixed
|
+ if (ncf->eheader != NULL) free(ncf->eheader); |
+ if (ncf->pheaders != NULL) free(ncf->pheaders); |
+ if (ncf->sheaders != NULL) free(ncf->sheaders); |
free(ncf); |
} |