From 66e996f40abbca9c62a262beeefb93b7b4c6e64f Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Sat, 8 Feb 2014 09:53:22 +0100 Subject: [PATCH 32/37] blkdebug: Don't leak bs->file on failure Message-id: <1392117622-28812-33-git-send-email-kwolf@redhat.com> Patchwork-id: 57197 O-Subject: [RHEL-7.0 qemu-kvm PATCH v2 32/37] blkdebug: Don't leak bs->file on failure Bugzilla: 748906 RH-Acked-by: Laszlo Ersek RH-Acked-by: Stefan Hajnoczi RH-Acked-by: Max Reitz Reported-by: Laszlo Ersek Signed-off-by: Kevin Wolf Reviewed-by: Laszlo Ersek Conflicts: block/blkdebug.c Conflicts because RHEL 7 doesn't have the blockdev-add support series for blkdebug. Signed-off-by: Kevin Wolf --- block/blkdebug.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) --- block/blkdebug.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-) diff --git a/block/blkdebug.c b/block/blkdebug.c index ccb562b..1e772a5 100644 --- a/block/blkdebug.c +++ b/block/blkdebug.c @@ -367,7 +367,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, if (error_is_set(&local_err)) { error_propagate(errp, local_err); ret = -EINVAL; - goto fail; + goto out; } /* Read rules from config file */ @@ -376,7 +376,7 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, ret = read_config(s, config); if (ret < 0) { error_setg_errno(errp, -ret, "Could not read blkdebug config file"); - goto fail; + goto out; } } @@ -388,13 +388,13 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, if (filename == NULL) { error_setg(errp, "Could not retrieve image file name"); ret = -EINVAL; - goto fail; + goto out; } ret = bdrv_file_open(&bs->file, filename, NULL, flags, &local_err); if (ret < 0) { error_propagate(errp, local_err); - goto fail; + goto out; } /* Set request alignment */ @@ -404,11 +404,15 @@ static int blkdebug_open(BlockDriverState *bs, QDict *options, int flags, } else { error_setg(errp, "Invalid alignment"); ret = -EINVAL; - goto fail; + goto fail_unref; } ret = 0; -fail: + goto out; + +fail_unref: + bdrv_unref(bs->file); +out: qemu_opts_del(opts); return ret; } -- 1.7.1