Fix resource leaks in fusermount
authorLaszlo Papp <ext-laszlo.papp@nokia.com>
Mon, 14 Mar 2011 13:52:39 +0000 (15:52 +0200)
committerMiklos Szeredi <mszeredi@suse.cz>
Wed, 30 Mar 2011 17:34:58 +0000 (19:34 +0200)
util/fusermount.c

index cd8a9c3dadcce13e98cd0f9b1f45ecef15b3ada2..adab9b08fd494040dec7f0d5f38d8e5e5d58e74d 100644 (file)
@@ -1054,8 +1054,7 @@ static int mount_fuse(const char *mnt, const char *opts)
                int mount_count = count_fuse_fs();
                if (mount_count >= mount_max) {
                        fprintf(stderr, "%s: too many FUSE filesystems mounted; mount_max=N can be set in /etc/fuse.conf\n", progname);
-                       close(fd);
-                       return -1;
+                       goto fail_close_fd;
                }
        }
 
@@ -1074,26 +1073,29 @@ static int mount_fuse(const char *mnt, const char *opts)
        if (mountpoint_fd != -1)
                close(mountpoint_fd);
 
-       if (res == -1) {
-               close(fd);
-               return -1;
-       }
+       if (res == -1)
+               goto fail_close_fd;
 
        if (geteuid() == 0) {
                res = add_mount(source, mnt, type, mnt_opts);
                if (res == -1) {
                        /* Can't clean up mount in a non-racy way */
-                       close(fd);
-                       return -1;
+                       goto fail_close_fd;
                }
        }
 
+out_free:
        free(source);
        free(type);
        free(mnt_opts);
        free(dev);
 
        return fd;
+
+fail_close_fd:
+       close(fd);
+       fd = -1;
+       goto out_free;
 }
 
 static int send_fd(int sock_fd, int fd)