Jeff Cody <jc...@redhat.com> writes: > On Mon, Mar 27, 2017 at 03:26:26PM +0200, Markus Armbruster wrote: >> qemu_rbd_open() neglects to check pool and image are present. >> Reproducer: >> >> $ qemu-system-x86_64 -nodefaults -drive if=none,driver=rbd,pool=p >> Segmentation fault (core dumped) > > This reproducer is wrong, I think. Omitting the image should be caught > earlier, but it is an error caught by the rbd_open() call.
Turns out the crash I observed was an artifact of my testing instrumentation. > What doesn't work is omitting the pool name, and that causes an abort() > from rados_ioctx_create(), e.g.: > > > $ qemu-system-x86_64 -nodefaults -drive > driver=rbd,id=rbd,image=i,server.0.port=6789,server.0.host=192.168.15.180 > terminate called after throwing an instance of 'std::logic_error' > what(): basic_string::_M_construct null not valid > Aborted (core dumped) > > >> $ qemu-system-x86_64 -nodefaults -drive if=none,driver=rbd,image=i >> qemu-system-x86_64: -drive if=none,driver=rbd,image=i: error opening >> pool (null) >> >> 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 <arm...@redhat.com> >> Reviewed-by: Eric Blake <ebl...@redhat.com> > > With an updated commit message: > > Reviewed-by: Jeff Cody <jc...@redhat.com> Thanks!