Fix memory leak in fusermount.
authorNikolaus Rath <Nikolaus@rath.org>
Fri, 28 Oct 2016 21:54:20 +0000 (14:54 -0700)
committerNikolaus Rath <Nikolaus@rath.org>
Fri, 28 Oct 2016 21:54:20 +0000 (14:54 -0700)
util/fusermount.c

index 41061bbfd8951fa2efb27e29e5875068380df1bb..03da451cf34637290ea7e823efc3602e03c8cc38 100644 (file)
@@ -1206,7 +1206,7 @@ int main(int argc, char *argv[])
                res = chdir("/");
                if (res == -1) {
                        fprintf(stderr, "%s: failed to chdir to '/'\n", progname);
-                       exit(1);
+                       goto err_out;
                }
        }
        restore_privs();
@@ -1221,21 +1221,23 @@ int main(int argc, char *argv[])
        if (commfd == NULL) {
                fprintf(stderr, "%s: old style mounting not supported\n",
                        progname);
-               exit(1);
+               goto err_out;
        }
 
        fd = mount_fuse(mnt, opts);
        if (fd == -1)
-               exit(1);
+               goto err_out;
 
        cfd = atoi(commfd);
        res = send_fd(cfd, fd);
        if (res == -1)
-               exit(1);
+               goto err_out;
        close(fd);
 
-       if (!auto_unmount)
+       if (!auto_unmount) {
+               free(mnt);
                return 0;
+       }
 
        /* Become a daemon and wait for the parent to exit or die.
           ie For the control socket to get closed.
@@ -1245,7 +1247,7 @@ int main(int argc, char *argv[])
        res = chdir("/");
        if (res == -1) {
                fprintf(stderr, "%s: failed to chdir to '/'\n", progname);
-               exit(1);
+               goto err_out;
        }
 
        sigfillset(&sigset);
@@ -1278,6 +1280,10 @@ do_unmount:
                                progname, mnt, strerror(errno));
        }
        if (res == -1)
-               exit(1);
+               goto err_out;
        return 0;
+
+err_out:
+       free(mnt);
+       exit(1);
 }