From 705e76ee8ddb2fd3d8127464b0c482b9fe43ef3e Mon Sep 17 00:00:00 2001 From: Wang Shilong Date: Thu, 4 Jul 2013 00:07:38 +0800 Subject: [PATCH] Btrfs-progs: fix possible memory leak related to subvolume/snapshot creation The operation related qgroup inherit may fails, if it fails, we should free memory allocated,otherwise, memory leak happens. Signed-off-by: Wang Shilong Signed-off-by: David Sterba Signed-off-by: Chris Mason --- cmds-subvolume.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/cmds-subvolume.c b/cmds-subvolume.c index ccb47627..9db989eb 100644 --- a/cmds-subvolume.c +++ b/cmds-subvolume.c @@ -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);