cuse_lowlevel.setup(): fix double free of local variable 'args'
authorWinfried Koehler <w_scan@gmx-topmail.de>
Thu, 10 Mar 2016 11:19:59 +0000 (12:19 +0100)
committerNikolaus Rath <Nikolaus@rath.org>
Fri, 11 Mar 2016 17:34:05 +0000 (09:34 -0800)
Signed-off-by: Winfried Koehler <w_scan@gmx-topmail.de>
lib/cuse_lowlevel.c

index fbaa873b5f1271c4a2382152386970bdce405a19..cef14c66c826b92f40b13cb293f339a6d87f314a 100644 (file)
@@ -281,12 +281,16 @@ struct fuse_session *cuse_lowlevel_setup(int argc, char *argv[],
        int res;
 
        res = fuse_parse_cmdline(&args, NULL, multithreaded, &foreground);
-       if (res == -1)
-               goto err_args;
+       if (res == -1) {
+               fuse_opt_free_args(&args);
+               return NULL;
+       }
 
        res = fuse_opt_parse(&args, NULL, kill_subtype_opts, NULL);
-       if (res == -1)
-               goto err_args;
+       if (res == -1) {
+               fuse_opt_free_args(&args);
+               return NULL;
+       }
 
        /*
         * Make sure file descriptors 0, 1 and 2 are open, otherwise chaos
@@ -301,7 +305,7 @@ struct fuse_session *cuse_lowlevel_setup(int argc, char *argv[],
        se = cuse_lowlevel_new(&args, ci, clop, userdata);
        fuse_opt_free_args(&args);
        if (se == NULL)
-               goto err_args;
+               return NULL;
 
        fd = open(devname, O_RDWR);
        if (fd == -1) {
@@ -335,8 +339,6 @@ err_sig:
        fuse_remove_signal_handlers(se);
 err_se:
        fuse_session_destroy(se);
-err_args:
-       fuse_opt_free_args(&args);
        return NULL;
 }