]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: fix resource leak [coverity scan]
authorKarel Zak <kzak@redhat.com>
Mon, 30 Jan 2012 22:38:18 +0000 (23:38 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 30 Jan 2012 22:38:18 +0000 (23:38 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
libmount/src/tab_update.c

index a9be364f910fd37c77f6850330a42dd0098ecf8a..7238faf687fc7e52515cda098115faee5ead1ddb 100644 (file)
@@ -517,7 +517,6 @@ static int update_table(struct libmnt_update *upd, struct libmnt_table *tb)
                struct stat st;
                struct libmnt_iter itr;
                struct libmnt_fs *fs;
-               int fd;
 
                mnt_reset_iter(&itr, MNT_ITER_FORWARD);
                while(mnt_table_next_fs(tb, &itr, &fs) == 0) {
@@ -538,7 +537,6 @@ static int update_table(struct libmnt_update *upd, struct libmnt_table *tb)
                        goto leave;
                }
 
-               fd = fileno(f);
                rc = fchmod(fd, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH) ? -errno : 0;
 
                if (!rc && stat(upd->filename, &st) == 0)
@@ -546,6 +544,7 @@ static int update_table(struct libmnt_update *upd, struct libmnt_table *tb)
                        rc = fchown(fd, st.st_uid, st.st_gid) ? -errno : 0;
 
                fclose(f);
+               f = NULL;
                rc = rename(uq, upd->filename) ? -errno : 0;
        } else {
                rc = -errno;
@@ -553,6 +552,9 @@ static int update_table(struct libmnt_update *upd, struct libmnt_table *tb)
        }
 
 leave:
+       if (f)
+               fclose(f);
+
        unlink(uq);     /* be paranoid */
        free(uq);
        return rc;