diff options
author | Markus Armbruster <armbru@redhat.com> | 2014-05-28 11:17:02 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2014-05-30 14:26:54 +0200 |
commit | 3cb0e25c4b417b7336816bd92de458f0770d49ff (patch) | |
tree | ca8a96057a4ced591ca22039249f977967a838e2 | |
parent | 6376f9522372d589f3efe60001dc0486237dd375 (diff) | |
download | hqemu-3cb0e25c4b417b7336816bd92de458f0770d49ff.zip hqemu-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>
-rw-r--r-- | blockdev.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -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; } |