Fix resource leak

Signed-off-by: Zbigniew Jasinski <z.jasinski@samsung.com>
This commit is contained in:
Zbigniew Jasinski 2014-06-04 17:49:58 +02:00 committed by Dmitry Kasatkin
parent dddef9172e
commit c5a2992bc8

View File

@ -1495,7 +1495,7 @@ static int ima_measurement(const char *file)
uint8_t pcr10[SHA_DIGEST_LENGTH]; uint8_t pcr10[SHA_DIGEST_LENGTH];
struct template_entry entry = { .template = 0 }; struct template_entry entry = { .template = 0 };
FILE *fp; FILE *fp;
int err; int err = -1;
memset(fox, 0xff, SHA_DIGEST_LENGTH); memset(fox, 0xff, SHA_DIGEST_LENGTH);
@ -1508,19 +1508,19 @@ static int ima_measurement(const char *file)
return -1; return -1;
} }
while ((err = fread(&entry.header, sizeof(entry.header), 1, fp))) { while (fread(&entry.header, sizeof(entry.header), 1, fp)) {
ima_extend_pcr(pcr, entry.header.digest, SHA_DIGEST_LENGTH); ima_extend_pcr(pcr, entry.header.digest, SHA_DIGEST_LENGTH);
if (!fread(entry.name, entry.header.name_len, 1, fp)) { if (!fread(entry.name, entry.header.name_len, 1, fp)) {
log_err("Unable to read template name\n"); log_err("Unable to read template name\n");
return -1; goto out;
} }
entry.name[entry.header.name_len] = '\0'; entry.name[entry.header.name_len] = '\0';
if (!fread(&entry.template_len, sizeof(entry.template_len), 1, fp)) { if (!fread(&entry.template_len, sizeof(entry.template_len), 1, fp)) {
log_err("Unable to read template length\n"); log_err("Unable to read template length\n");
return -1; goto out;
} }
if (entry.template_buf_len < entry.template_len) { if (entry.template_buf_len < entry.template_len) {
@ -1531,7 +1531,7 @@ static int ima_measurement(const char *file)
if (!fread(entry.template, entry.template_len, 1, fp)) { if (!fread(entry.template, entry.template_len, 1, fp)) {
log_err("Unable to read template\n"); log_err("Unable to read template\n");
return -1; goto out;
} }
if (validate) if (validate)
@ -1543,8 +1543,6 @@ static int ima_measurement(const char *file)
ima_ng_show(&entry); ima_ng_show(&entry);
} }
fclose(fp);
tpm_pcr_read(10, pcr10, sizeof(pcr10)); tpm_pcr_read(10, pcr10, sizeof(pcr10));
log_info("PCRAgg: "); log_info("PCRAgg: ");
@ -1555,10 +1553,14 @@ static int ima_measurement(const char *file)
if (memcmp(pcr, pcr10, sizeof(pcr))) { if (memcmp(pcr, pcr10, sizeof(pcr))) {
log_err("PCRAgg does not match PCR-10\n"); log_err("PCRAgg does not match PCR-10\n");
return -1; goto out;
} }
return 0; err = 0;
out:
fclose(fp);
return err;
} }
static int cmd_ima_measurement(struct command *cmd) static int cmd_ima_measurement(struct command *cmd)