Btrfs-progs: fix possible memory leak related to subvolume/snapshot creation
authorWang Shilong <wangsl-fnst@cn.fujitsu.com>
Wed, 3 Jul 2013 16:07:38 +0000 (00:07 +0800)
committerDavid Sterba <dsterba@suse.cz>
Fri, 9 Aug 2013 12:32:33 +0000 (14:32 +0200)
The operation related qgroup inherit may fails, if it fails, we should
free memory allocated,otherwise, memory leak happens.

Signed-off-by: Wang Shilong <wangsl-fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
cmds-subvolume.c

index ccb4762..9db989e 100644 (file)
@@ -89,13 +89,17 @@ static int cmd_subvol_create(int argc, char **argv)
                switch (c) {
                case 'c':
                        res = qgroup_inherit_add_copy(&inherit, optarg, 0);
-                       if (res)
-                               return res;
+                       if (res) {
+                               retval = res;
+                               goto out;
+                       }
                        break;
                case 'i':
                        res = qgroup_inherit_add_group(&inherit, optarg);
-                       if (res)
-                               return res;
+                       if (res) {
+                               retval = res;
+                               goto out;
+                       }
                        break;
                default:
                        usage(cmd_subvol_create_usage);
@@ -516,21 +520,27 @@ static int cmd_snapshot(int argc, char **argv)
                switch (c) {
                case 'c':
                        res = qgroup_inherit_add_copy(&inherit, optarg, 0);
-                       if (res)
-                               return res;
+                       if (res) {
+                               retval = res;
+                               goto out;
+                       }
                        break;
                case 'i':
                        res = qgroup_inherit_add_group(&inherit, optarg);
-                       if (res)
-                               return res;
+                       if (res) {
+                               retval = res;
+                               goto out;
+                       }
                        break;
                case 'r':
                        readonly = 1;
                        break;
                case 'x':
                        res = qgroup_inherit_add_copy(&inherit, optarg, 1);
-                       if (res)
-                               return res;
+                       if (res) {
+                               retval = res;
+                               goto out;
+                       }
                        break;
                default:
                        usage(cmd_snapshot_usage);