Fix resource leak
authorZbigniew Jasinski <z.jasinski@samsung.com>
Wed, 4 Jun 2014 15:49:58 +0000 (17:49 +0200)
committerDmitry Kasatkin <d.kasatkin@samsung.com>
Tue, 24 Jun 2014 12:54:37 +0000 (15:54 +0300)
Signed-off-by: Zbigniew Jasinski <z.jasinski@samsung.com>
src/evmctl.c

index 0d7c286..4d542d3 100644 (file)
@@ -1495,7 +1495,7 @@ static int ima_measurement(const char *file)
        uint8_t pcr10[SHA_DIGEST_LENGTH];
        struct template_entry entry = { .template = 0 };
        FILE *fp;
-       int err;
+       int err = -1;
 
        memset(fox, 0xff, SHA_DIGEST_LENGTH);
 
@@ -1508,19 +1508,19 @@ static int ima_measurement(const char *file)
                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);
 
                if (!fread(entry.name, entry.header.name_len, 1, fp)) {
                        log_err("Unable to read template name\n");
-                       return -1;
+                       goto out;
                }
 
                entry.name[entry.header.name_len] = '\0';
 
                if (!fread(&entry.template_len, sizeof(entry.template_len), 1, fp)) {
                        log_err("Unable to read template length\n");
-                       return -1;
+                       goto out;
                }
 
                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)) {
                        log_err("Unable to read template\n");
-                       return -1;
+                       goto out;
                }
 
                if (validate)
@@ -1543,8 +1543,6 @@ static int ima_measurement(const char *file)
                        ima_ng_show(&entry);
        }
 
-       fclose(fp);
-
        tpm_pcr_read(10, pcr10, sizeof(pcr10));
 
        log_info("PCRAgg: ");
@@ -1555,10 +1553,14 @@ static int ima_measurement(const char *file)
 
        if (memcmp(pcr, pcr10, sizeof(pcr))) {
                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)