Fix several leaks on error paths
authorEric Sandeen <sandeen@redhat.com>
Fri, 16 Dec 2011 19:15:54 +0000 (13:15 -0600)
committerJens Axboe <jaxboe@fusionio.com>
Wed, 1 Feb 2012 12:14:28 +0000 (13:14 +0100)
In several cases space is allocated for a filename but
not freed if open of that file fails.

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
btt/aqd.c
btt/bno_dump.c
btt/plat.c
btt/seek.c

index 3bb6f8521f0c7935860ff562bf1a0819d6fb6a0a..17ab15b8c72a1ca76589de67f69fb2df2a3f06eb 100644 (file)
--- a/btt/aqd.c
+++ b/btt/aqd.c
@@ -43,6 +43,8 @@ void *aqd_alloc(struct d_info *dip)
        sprintf(oname, "%s_%s_aqd.dat", aqd_name, dip->dip_name);
        if ((ap->fp = my_fopen(oname, "w")) == NULL) {
                perror(oname);
+               free(oname);
+               free(ap);
                return NULL;
        }
        add_file(ap->fp, oname);
index 02f38111d9b9e70f1bfe09192a826304f2e23e7f..00c9ac2e9a440c442cb7b14468e5cff94983670c 100644 (file)
@@ -31,9 +31,10 @@ static FILE *bno_dump_open(struct d_info *dip, char rwc)
 
        oname = malloc(strlen(bno_dump_name) + strlen(dip->dip_name) + 32);
        sprintf(oname, "%s_%s_%c.dat", bno_dump_name, dip->dip_name, rwc);
-       if ((fp = my_fopen(oname, "w")) == NULL)
+       if ((fp = my_fopen(oname, "w")) == NULL) {
                perror(oname);
-       else
+               free(oname);
+       } else
                add_file(fp, oname);
        return fp;
 }
index e7b7dde6d22e49525c5fad2c6bce422dc1646e1e..dff711592ee56c5e0fd77f5e214cc16d5caa6965 100644 (file)
@@ -42,6 +42,8 @@ void *plat_alloc(struct d_info *dip, char *post)
        sprintf(oname, "%s%s_plat.dat", dip->dip_name, post);
        if ((pp->fp = my_fopen(oname, "w")) == NULL) {
                perror(oname);
+               free(oname);
+               free(pp);
                return NULL;
        }
        add_file(pp->fp, oname);
index abdb0ee0c0b61324a703fdb5b06dc2b09744d165..dba007180284ff8fb4e80bf73d949bc59a1b9f1b 100644 (file)
@@ -51,9 +51,10 @@ static FILE *seek_open(char *str, char rw)
 
        oname = malloc(strlen(seek_name) + strlen(str) + 32);
        sprintf(oname, "%s_%s_%c.dat", seek_name, str, rw);
-       if ((fp = my_fopen(oname, "w")) == NULL)
+       if ((fp = my_fopen(oname, "w")) == NULL) {
                perror(oname);
-       else
+               free(oname);
+       } else
                add_file(fp, oname);
 
        return fp;
@@ -226,9 +227,10 @@ void *seeki_alloc(struct d_info *dip, char *post)
 
                oname = malloc(strlen(sps_name) + strlen(dip->dip_name) + 32);
                sprintf(oname, "%s_%s.dat", sps_name, dip->dip_name);
-               if ((sip->sps_fp = my_fopen(oname, "w")) == NULL)
+               if ((sip->sps_fp = my_fopen(oname, "w")) == NULL) {
                        perror(oname);
-               else
+                       free(oname);
+               } else
                        add_file(sip->sps_fp, oname);
        } else
                sip->sps_fp = NULL;