summaryrefslogtreecommitdiff
path: root/blockdev.c
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2014-05-28 11:17:02 +0200
committerKevin Wolf <kwolf@redhat.com>2014-05-30 14:26:54 +0200
commit3cb0e25c4b417b7336816bd92de458f0770d49ff (patch)
treeca8a96057a4ced591ca22039249f977967a838e2 /blockdev.c
parent6376f9522372d589f3efe60001dc0486237dd375 (diff)
downloadqemu-3cb0e25c4b417b7336816bd92de458f0770d49ff.tar.gz
blockdev: Plug memory leak in drive_init()
bs_opts is leaked on all paths from its qdev_new() that don't got through blockdev_init(). Add the missing QDECREF(), and zap bs_opts after blockdev_init(), so the new QDECREF() does nothing when we go through blockdev_init(). Leak introduced in commit f298d07. Spotted by Coverity. Signed-off-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'blockdev.c')
-rw-r--r--blockdev.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/blockdev.c b/blockdev.c
index 652a0523b8..9b5261b765 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -940,6 +940,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
/* Actual block device init: Functionality shared with blockdev-add */
dinfo = blockdev_init(filename, bs_opts, &local_err);
+ bs_opts = NULL;
if (dinfo == NULL) {
if (local_err) {
error_report("%s", error_get_pretty(local_err));
@@ -977,6 +978,7 @@ DriveInfo *drive_init(QemuOpts *all_opts, BlockInterfaceType block_default_type)
fail:
qemu_opts_del(legacy_opts);
+ QDECREF(bs_opts);
return dinfo;
}