| 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));
|
| +
|
| /* 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);
|
| + if (ncf->eheader != NULL) free(ncf->eheader);
|
| + if (ncf->pheaders != NULL) free(ncf->pheaders);
|
| + if (ncf->sheaders != NULL) free(ncf->sheaders);
|
| free(ncf);
|
| }
|
|
|
|
|