[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PULL for-2.9 02/10] rbd: Fix to cleanly reject -drive with
From: |
Jeff Cody |
Subject: |
[Qemu-block] [PULL for-2.9 02/10] rbd: Fix to cleanly reject -drive without pool or image |
Date: |
Tue, 28 Mar 2017 10:05:47 -0400 |
From: Markus Armbruster <address@hidden>
qemu_rbd_open() neglects to check pool and image are present. Missing
image is caught by rbd_open(), but missing pool crashes. Reproducer:
$ qemu-system-x86_64 -nodefaults -drive driver=rbd,id=rbd,image=i,...
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
Aborted (core dumped)
where ... is a working server.0.{host,port} configuration.
Doesn't affect -drive with file=..., because qemu_rbd_parse_filename()
always sets both pool and image.
Doesn't affect -blockdev, because pool and image are mandatory in the
QAPI schema.
Fix by adding the missing checks.
Signed-off-by: Markus Armbruster <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
Reviewed-by: Max Reitz <address@hidden>
Reviewed-by: Jeff Cody <address@hidden>
Message-id: address@hidden
Signed-off-by: Jeff Cody <address@hidden>
---
block/rbd.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/block/rbd.c b/block/rbd.c
index ee13f3d..5ba2a87 100644
--- a/block/rbd.c
+++ b/block/rbd.c
@@ -711,6 +711,12 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict
*options, int flags,
name = qemu_opt_get(opts, "image");
keypairs = qemu_opt_get(opts, "keyvalue-pairs");
+ if (!pool || !name) {
+ error_setg(errp, "Parameters 'pool' and 'image' are required");
+ r = -EINVAL;
+ goto failed_opts;
+ }
+
r = rados_create(&s->cluster, clientname);
if (r < 0) {
error_setg_errno(errp, -r, "error initializing");
@@ -718,9 +724,7 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict
*options, int flags,
}
s->snap = g_strdup(snap);
- if (name) {
- pstrcpy(s->name, RBD_MAX_IMAGE_NAME_SIZE, name);
- }
+ pstrcpy(s->name, RBD_MAX_IMAGE_NAME_SIZE, name);
/* try default location when conf=NULL, but ignore failure */
r = rados_conf_read_file(s->cluster, conf);
--
2.9.3
- [Qemu-block] [PULL for-2.9 00/10] Block patches for -rc2, Jeff Cody, 2017/03/28
- [Qemu-block] [PULL for-2.9 01/10] rbd: Reject -blockdev server.*.{numeric, to, ipv4, ipv6}, Jeff Cody, 2017/03/28
- [Qemu-block] [PULL for-2.9 03/10] rbd: Don't limit length of parameter values, Jeff Cody, 2017/03/28
- [Qemu-block] [PULL for-2.9 04/10] rbd: Clean up after the previous commit, Jeff Cody, 2017/03/28
- [Qemu-block] [PULL for-2.9 05/10] rbd: Don't accept -drive driver=rbd, keyvalue-pairs=..., Jeff Cody, 2017/03/28
- [Qemu-block] [PULL for-2.9 07/10] rbd: Clean up qemu_rbd_create()'s detour through QemuOpts, Jeff Cody, 2017/03/28
- [Qemu-block] [PULL for-2.9 02/10] rbd: Fix to cleanly reject -drive without pool or image,
Jeff Cody <=
- [Qemu-block] [PULL for-2.9 06/10] rbd: Clean up runtime_opts, fix -drive to reject filename, Jeff Cody, 2017/03/28
- [Qemu-block] [PULL for-2.9 08/10] rbd: Revert -blockdev and -drive parameter auth-supported, Jeff Cody, 2017/03/28
- [Qemu-block] [PULL for-2.9 10/10] rbd: Fix bugs around -drive parameter "server", Jeff Cody, 2017/03/28
- [Qemu-block] [PULL for-2.9 09/10] rbd: Revert -blockdev parameter password-secret, Jeff Cody, 2017/03/28
- Re: [Qemu-block] [PULL for-2.9 00/10] Block patches for -rc2, Peter Maydell, 2017/03/28